jqコマンドでJSONの成形
元のJSONファイル
以下のJSONをサンプルデータとして使います。
{
"total": 4,
"date": "2022-12-01T00:00:00+09",
"items": [
{
"id": 1,
"name": "item1",
"price": 100
},
{
"id": 2,
"name": "item2",
"price": 101
},
{
"id": 3,
"name": "item3",
"price": 103
},
{
"id": 4,
"name": "item4",
"price": 104
}
]
}
特定の要素を取り出す
totalキーの値を取り出します。
$ cat item.json | jq '.total'
10
$ cat item.json | jq '.date'
"2022-12-01T00:00:00+09"
-rオプションでダブルクォーテーションを削除できます。
$ cat item.json | jq -r '.date'
2022-12-01T00:00:00+09
JSONの配列から一部の要素を取り出して配列を作る
map関数を使って、items要素から特定要素のみを持つJSONの配列を作ります。
$ cat item.json | jq -r '.items | map({id: .id, name: .name})'
[
{
"id": 1,
"name": "item1"
},
{
"id": 2,
"name": "item2"
},
{
"id": 3,
"name": "item3"
},
{
"id": 4,
"name": "item4"
}
]
JSONからCSVを作る
上記結果からの配列内の要素のみ取り出します。
$ cat item.json | jq -r '.items | map({id: .id, name: .name}) | .[] | [.id, .name]'
[
1,
"item1"
]
[
2,
"item2"
]
[
3,
"item3"
]
[
4,
"item4"
]
@csvに渡してCSVに変換します。
cat item.json | jq -r '.items | map({id: .id, name: .name}) | .[] | [.id, .name] | @csv'
1,"item1"
2,"item2"
3,"item3"
4,"item4"