我有这个 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 中获得相同的结果?
提前致谢
文斯
一个可以在两个版本上使用的便携式设备是,
.vars.instances |= map(select(index("one")|not))
或者如果您想仍然使用
del()
,请将字符串 "one"
的索引输入到函数中,如下所示,其中 index("one")
获取索引 0
,然后将其传递给删除,因为 del(.[0])
表示删除第零个索引处的元素。
.vars.instances |= del(.[index("one")])
del/1
的实现已被证明相当困难,而且它确实在 jq 1.5 和 jq 1.6 之间发生了变化,因此如果跨不同版本的 jq 的可移植性很重要,那么del/1
的使用应该限制在最不复杂的情况下(例如,没有管道)或非常小心地进行。