jqを使用して構造化出力を取得する

jqを使用して構造化出力を取得する

jqを処理するための入力として、次のjsonがあります。

[
    {
        "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"
    }
]

./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"
      }
    }
  }
]

ベストアンサー1

十分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"
      }
    }
  }
]

おすすめ記事