APIを介して取得したjsonから次のオブジェクトを取得する必要があります。 Ubuntu 16.04で提供されているjqを使用しようとしています。この形式でデータを取得しようとしています。device_name C:|
free 18707755008.0
total_size 55832473600.0
この問題をどのように処理するかを提案できますか?目標は、Excelから3つ以上のオブジェクトを取得することです。
{
"logical": {
"D:|": {
"device_name": [
"D:\\"
],
"used_percent": [
52.6,
"%"
],
"fstype": "NTFS",
"free": [
10178084864.0,
"B"
],
"total_size": [
21471686656.0,
"B"
],
"used": [
11293601792.0,
"B"
],
"opts": "rw,fixed"
},
"C:|": {
"device_name": [
"C:\\"
],
"used_percent": [
66.5,
"%"
],
"fstype": "NTFS",
"free": [
18707755008.0,
"B"
],
"total_size": [
55832473600.0,
"B"
],
"used": [
37124718592.0,
"B"
],
"opts": "rw,fixed"
}
}
}
答え1
次は2行を出力し、最後の行の文字列形式は簡単に変更できます。
jq -M -r '.[] | keys[] as $var |
[.[$var].free[0], .[$var].total_size[0]] as [$f,$t] |
"device_name \($var) free \($f) total_size \($t)" '
出力:
device_name C:| free 18707755008 total_size 55832473600
device_name D:| free 10178084864 total_size 21471686656
答え2
これを使用してください:
jq '.logical["D:|"].free[0], .logical["D:|"].total_size[0]' file.json
出力:
10178084864
21471686656
答え3
下のキーから直接デバイス名を取得するのではなく、下のキーdevice_name
値からデバイス名を取得したいとします(この方法は簡単で、Windowsシステムで有効なデバイス名である値も提供します)。logical
logical
測定単位実際の数値に追加されます(データに可変単位がある場合は意味があります)。
jq -r '
["Device name", "Free space", "Total size"],
(
.logical[] |
[
.device_name[0],
(.free | map(tostring) | add),
(.total_size | map(tostring) | add)
]
) | @csv' file.json
質問のデータが与えられると、file.json
次のCSV文書が生成されます(Excelに簡単にインポートできます)。
"Device name","Free space","Total size"
"D:\","10178084864B","21471686656B"
"C:\","18707755008B","55832473600B"
数字と単位の間にスペースを入れるには、両方の呼び出しをそれぞれadd
intoに変更します。join(" ")