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"
}
}
}
]
答え2
このようにJSONを再配置すると、害を及ぼします。
生のJSONは私にとっては大丈夫です。
udev
これにより、任意のサイズのファイルシステムを取得することができます。
jq '.[] | select(.Filesystem == "udev").Size' file.json
再構成されたファイルに対する同様の簡単な操作は次のとおりです。
jq '.[] | ."Disk Partition Details".udev.Size' file1.json
私が知る限り、再配置されたファイルはファイルシステムタイプごとに1つのマウントポイントしかサポートしません。複数のファイルシステムがある場合は、tmpfs
どこに配置するのかわかりません。