jq:从数组中删除元素

问题描述 投票:0回答:2

我有这个 JSON 文件,想要从数组中删除一个元素:

{
"address": "localhost",
"name": "local",
"vars": {
    "instances": [
        "one",
        "two"
    ]
  }
}

我正在使用这个命令:

jq 'del(.vars.instances[] | select(index("one")))' data.json

输出为:

{
"address": "localhost",
"name": "local",
"vars": {
    "instances": [
        "two"
    ]
  }
}

所以它按预期工作,但仅限于 jq v1.6。使用 jq v1.5 我收到此错误:

jq: error (at data.json:20): Invalid path expression near attempt to access element 0 of [0]

那么我做错了什么?这是 v1.5 的错误还是功能?有没有任何解决方法可以在 v1.5 中获得相同的结果?

提前致谢

文斯

arrays json jq
2个回答
5
投票

一个可以在两个版本上使用的便携式设备是,

.vars.instances |= map(select(index("one")|not))

或者如果您想仍然使用

del()
,请将字符串
"one"
的索引输入到函数中,如下所示,其中
index("one")
获取索引
0
,然后将其传递给删除,因为
del(.[0])
表示删除第零个索引处的元素。

.vars.instances |= del(.[index("one")])

3
投票

del/1
的实现已被证明相当困难,而且它确实在 jq 1.5 和 jq 1.6 之间发生了变化,因此如果跨不同版本的 jq 的可移植性很重要,那么
del/1
的使用应该限制在最不复杂的情况下(例如,没有管道)或非常小心地进行。

© www.soinside.com 2019 - 2024. All rights reserved.