使用 jq 合并 JSON 文件中的两个数组

Merge two arrays from a JSON file using jq

提问人:DavSev 提问时间:11/13/2023 最后编辑:Barbaros ÖzhanDavSev 更新时间:11/13/2023 访问量:71

问:

我有一个包含以下代码的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"}]}

我怎样才能做到这一点? 我可以通过数组名称来控制合并吗?如果我在该对象上有更多的数组?

数组 JSON jq

评论


答:

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当然,请随时将其添加到您自己的答案中(而不是[.[][]])