Json

使用 jq 獲取結構化輸出

  • November 25, 2018

我有以下 json 作為 jq 處理的輸入

[
   {
       "Category": "Disk Partition Details",
       "Filesystem": "udev",
       "Size": "3.9G",
       "Used": 0,
       "Avail": "3.9G",
       "Use%": "0%",
       "Mounted": "/dev"
   },
   {
       "Category": "Disk Partition Details",
       "Filesystem": "tmpfs",
       "Size": "799M",
       "Used": "34M",
       "Avail": "766M",
       "Use%": "5%",
       "Mounted": "/run"
   }
]

按照@peak here./csvtojson.sh bb.csv | jq 'map( {(.Category): del(.Category)})'的建議使用 ,我已經達到了下面的json

 [
 {
   "Disk Partition Details": {
     "Filesystem": "udev",
     "Size": "3.9G",
     "Used": 0,
     "Avail": "3.9G",
     "Use%": "0%",
     "Mounted": "/dev"
   }
 },
 {
   "Disk Partition Details": {
     "Filesystem": "tmpfs",
     "Size": "799M",
     "Used": "34M",
     "Avail": "766M",
     "Use%": "5%",
     "Mounted": "/run"
   }
 }
]

我想要的只是將類別放在頂部一次,然後像我在上一步中所做的那樣將這個 json 分解到另一個級別。

[
 {
   "Disk Partition Details": {
     "udev" :{
     "Size": "3.9G",
     "Used": 0,
     "Avail": "3.9G",
     "Use%": "0%",
     "Mounted": "/dev"
     },

     "tmpfs" : {
     "Size": "799M",
     "Used": "34M",
     "Avail": "766M",
     "Use%": "5%",
     "Mounted": "/run"
     }
   }
 }
]

完整的**jq**解決方案:

jq '[ group_by(.Category)[0] | .[0].Category as $k 
     | { ($k): (reduce .[] as $o 
                   ({}; .[($o.Filesystem)] = ($o | del($o.Category, $o.Filesystem)))
               ) 
       } 
   ]' input.json

如果"Filesystem"鍵可能是數字 - 更改.[($o.Filesystem)]為以下.[($o.Filesystem | tostring)]


輸出:

[
 {
   "Disk Partition Details": {
     "udev": {
       "Size": "3.9G",
       "Used": 0,
       "Avail": "3.9G",
       "Use%": "0%",
       "Mounted": "/dev"
     },
     "tmpfs": {
       "Size": "799M",
       "Used": "34M",
       "Avail": "766M",
       "Use%": "5%",
       "Mounted": "/run"
     }
   }
 }
]

引用自:https://unix.stackexchange.com/questions/428727