次のJSON形式があります。
{
"page":1,
"total_results":1,
"total_pages":1,
"results":[
{
"id":6037,
"genre_ids":[35,80,9648,53],
"popularity":11.379
}
]
}
Genre_ids配列はコンマで区切られ、水平間隔にタブを追加しないこの形式を生成する必要があります。
6037 35,80,9648,53 11.379
以下を使用して結果の配列を平面化することができました。
jq -r '.results[0] | [.id,.popularity] | @tsv'
結果:
6037 11.379
しかし、Genre_idsを追加すると:
jq -r '.results[0] | [.id,.genre_ids[],.popularity] | @tsv'
私は得る:
308531 28 12 35 878 10751 32.497
genre_ids
タブ区切りの親要素内で配列をカンマ区切りリストにマージする方法は?
答え1
あなたはできますjoin
配列を文字列に変換:
$ jq -r '.results[0] | [.id,(.genre_ids | join(",")),.popularity] | @tsv' < foo.json
6037 35,80,9648,53 11.379
答え2
jq -r '.results[] | [ .id, (.genre_ids|@csv), .popularity ] | @tsv' file
これにより、genre_ids
配列がタブ区切りの出力の一部になる前にCSV形式のレコードに再フォーマットされます。
質問のデータを考慮すると、出力は次のようになります。
6037 35,80,9648,53 11.379
results
配列に複数の要素が含まれる場合、各要素は独自の出力ラインで書式設定されます。
配列に多くの要素を提供する出力の例results
:
$ cat file
{
"page": 1,
"results": [
{
"genre_ids": [ 3, 8, 964, 5 ],
"id": 6000,
"popularity": 12
},
{
"genre_ids": [ 35, 80, 9648, 53 ],
"id": 6037,
"popularity": 11.379
}
],
"total_pages": 1,
"total_results": 2
}
$ jq -r '.results[] | [ .id, (.genre_ids|@csv), .popularity ] | @tsv' file
6000 3,8,964,5 12
6037 35,80,9648,53 11.379