我有以下 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