提问人:DavSev 提问时间:11/13/2023 最后编辑:Barbaros ÖzhanDavSev 更新时间:11/13/2023 访问量:71
使用 jq 合并 JSON 文件中的两个数组
Merge two arrays from a JSON file using jq
问:
我有一个包含以下代码的JSON文件:
{
"fruits": [
{
"name": "banana"
},
{
"name": "apple"
}
],
"vegetables": [
{
"name": "tomato"
},
{
"name": "onion"
}
]
}
我想使用命令将第二个数组项合并到第一个数组项中。jq
如果我执行以下操作
jq -c < file.json
我收到
{"fruits":[{"name":"banana"},{"name":"apple"}],"vegtabels":[{"name":"tomato"},{"name":"onion"}]}
我想要收到
{"fruits":[{"name":"banana"},{"name":"apple"},{"name":"tomato"},{"name":"onion"}]}
我怎样才能做到这一点? 我可以通过数组名称来控制合并吗?如果我在该对象上有更多的数组?
答:
1赞
pmf
11/13/2023
#1
您可以使用 遍历所有二级项目,并使用数组构造函数将它们收集到数组中:.[][]
[…]
jq -c '{fruits: [.[][]]}'
{"fruits":[{"name":"banana"},{"name":"apple"},{"name":"tomato"},{"name":"onion"}]}
例如,如果您不知道字段名称,则可以使用来获取第一个键的名称(按此表示顺序排列的第一个):演示keys_unsorted[0]
{(keys_unsorted[0]): [.[][]]}
1赞
knittl
11/13/2023
#2
几种选择:
.fruits += .vegetables | del(.vegetables)
{ fruits: (.fruits + .vegetables) }
{ fruits: map(.[]) }
评论
1赞
pmf
11/13/2023
你忘记了最简单的一个:{fruits: flatten}
0赞
knittl
11/13/2023
@pmf当然,请随时将其添加到您自己的答案中(而不是[.[][]]
)
评论