请考虑以下jq config:
walk
(
if (type == "object" and .key | test("something")) then
del(.)
else
.
end
)
跟随json:
[
{
"key": "something",
"value": "something"
},
{
"key": "another thing",
"value": "another thing"
},
{
"key": "something",
"value": "something"
}
]
但是,jq会抛出以下错误:
jq:error(at:13):boolean(false)无法匹配,因为它不是字符串
13是输入的最后一行。它试图匹配什么布尔值?
答案 0 :(得分:1)
此处不需要walk()
。我会像这样使用map()
:
jq 'map(select(.key!="something"))'
关于您报告的错误,您会错过括号。它应该是:
jq 'walk(if(type == "object" and (.key | test("something"))) then del(.) else . end)'
^ ^
答案 1 :(得分:1)
正如@ hek2mgl所解释的那样,关于错误消息的问题的答案是(X and Y | Z)
被解析为(X and Y) | Z
。
您的查询的主要问题是del(.)
的出现。 "。"在这种情况下引用对象,因此在这里使用del / 1是完全错误的。由于它不清楚你想要做什么,让我冒昧地猜测它是删除对象(。)本身。可以使用empty
:
walk(if type == "object" and (.key | test("something"))
then empty
else . end)
更强大:
walk(if type == "object" and (.key | (type == "string" and test("something")))
then empty
else . end)