使用 jq 追加 json 数组

append json array using jq

我有一个 json 文件,我正在从 consul 获取它,结果非常简单:

[ { "name" : Jon", "class" : "senior" } ]

我想更新数组 json:

{ "name" : santa", "class" : "christmas" }

输出应该是:

[ { "name" : Jon", "class" : "senior" }, { "name" : santa", "class" : "christmas" } ]

这看起来很简单,但我现在做不到。

这就是我一直在尝试的 jq:

JSON=[{ "name" : Jon", "class" : "senior" }]

echo $JSON | jq '.[] += { "new_key" : "new_value" }'

我在 Whosebug 上遵循了一些答案,但其中大部分都是关于添加单个元素的。

您的脚本有几个问题。一般来说,这应该有效(但在某些层面上仍需要改进):

JSON='[{"name": "Jon", "class": "senior"}]'
echo "$JSON" | jq '. += [{"new_key": "new_value"}]'
[
  {
    "name": "Jon",
    "class": "senior"
  },
  {
    "new_key": "new_value"
  }
]

这个问题可能与 重复。

无论如何,作为一种捷径,这里是你如何在不通过管道传输源 JSON 数组的情况下做到这一点:

JSON='[{"name": "Jon", "class": "senior"}]'
jq --null-input --argjson  a "$JSON" '$a  + [{"name" : "santa", "class" : "christmas" }]'