gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:14:39 24 4
gpt4 key购买 nike

我使用 jq 将字符串添加到 JSON 数组,效果很好,但我只想添加尚不存在的字符串。我尝试过 unique、has、not 等。我遗漏了一两 block 拼图。

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

{
"widgets": [
{
"name": "foo",
"properties": [
"baz"
]
},
{
"name": "bar"
}
]
}

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

$ cat foo.json | jq '.widgets[] | select(.name=="foo").properties |= .+ ["cat"]'

这是我尝试的最新版本。

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

最佳答案

[这不起作用。请阅读下文。]

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

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

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

这里有一些问题。

其中之一是结果输出是部分的,因为它缺少容器对象。

另一个问题是编辑后的数组丢失了分隔对象的逗号,从而成为非法 JSON。

上述命令的实际结果是:

{
"name": "foo",
"properties": [
"baz",
"cat"
]
}
{
"name": "bar"
}

关于json - 使用 jq 有条件地将元素添加到 json 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32167453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com