使用jq有条件地将元素添加到json数组

bri*_*ian 5 json jq

我正在使用jq将字符串添加到JSON数组,并且它工作得很好,但我只想添加尚不存在的字符串.我已经尝试过独特的,有,而不是等等.我错过了一两块拼图.

这是我的起始json文件foo.json:

{
  "widgets": [
    {
      "name": "foo",
      "properties": [
        "baz"
      ]
    },
    {
      "name": "bar"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

这是我构建的jq命令,它添加了字符串,即使它已经存在:

$ cat foo.json | jq '.widgets[] | select(.name=="foo").properties |= .+ ["cat"]'
Run Code Online (Sandbox Code Playgroud)

这是我尝试的最新版本.

$ cat foo.json | jq '.widgets[] | select(.name=="foo").properties | has("cat") | not | .properties += ["cat"]'
jq: error: Cannot check whether array has a string key
Run Code Online (Sandbox Code Playgroud)

小智 8

有很多方法可以做到这一点.

假设数组的元素应该是唯一的,您的用例强烈暗示,您可以在添加后通过unique过滤器传递结果数组.

$ cat foo.json | jq '.widgets[] | select(.name=="foo").properties |= (.+ ["cat"] | unique)'
Run Code Online (Sandbox Code Playgroud)