Arrays jq:从数组中删除元素

Arrays jq:从数组中删除元素,arrays,json,jq,Arrays,Json,Jq,我有这个JSON文件,想从数组中删除一个元素: { "address": "localhost", "name": "local", "vars": { "instances": [ "one", "two" ] } } 我正在使用此命令: jq 'del(.vars.instance

我有这个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"
    ]
  }
}
因此,它可以按预期工作,但仅适用于jqv1.6。在jq v1.5中,我遇到了以下错误:

jq: error (at data.json:20): Invalid path expression near attempt to access element 0 of [0]
那么我做错了什么?这是一个bug还是v1.5的一个特性?在v1.5中是否有任何变通方法可以获得相同的结果

提前谢谢


Vince

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

.vars.instances |= map(select(index("one")|not))
或者,如果仍要使用
del()
,请按如下方式将字符串
的索引“one”
馈送给函数,其中
索引(“one”)
获取索引
0
,然后将其作为
del([0])
传递给delete,意思是删除第0个索引处的元素

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

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

.vars.instances |= map(select(index("one")|not))
或者,如果仍要使用
del()
,请按如下方式将字符串
的索引“one”
馈送给函数,其中
索引(“one”)
获取索引
0
,然后将其作为
del([0])
传递给delete,意思是删除第0个索引处的元素

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

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