命令:
cat test.json | jq -r '.[] | select(.input[] | .["$link"] | contains("randomtext1")) | .id'
我希望同时显示两个条目(a
和b
),因为它们都包含randomtext1
相反,我得到以下输出消息:
a
jq: error (at <stdin>:22): Cannot index string with string "$link"
通过一些挖掘,我了解到该问题很可能是由a
条目中的以下对象/值对引起的:
"someotherobj": "123"
因为它不包含对象$link
,并且命令中的过滤器希望在$link
下的所有对象中看到input
,所以它会在命令有机会执行以下操作之前出错在b
条目中进行搜索。
我真正想要的是能够搜索在"$link": "randomtext1"
下具有至少一对input
对的所有条目。是否有模糊的搜索功能可以使我实现这一目标?
我尝试使用两个contains
希望它可以通过以下方式传送内容:
jq -r '.[] | select(.input[] | contains(["$link"]) | contains("randomtext1")) | .id'
但是一点都不喜欢。
test.json文件:
[
{
"input": {
"obj1": {
"$link": "randomtext1"
},
"obj2": {
"$link": "randomtext2"
},
"someotherobj": "123"
},
"id": "a"
},
{
"input": {
"obj3": {
"$link": "randomtext1"
},
"obj4": {
"$link": "randomtext2"
}
},
"id": "b"
}
]
答案 0 :(得分:0)
我真正想要的是能够搜索在输入下至少具有一对“ $ link”:“ randomtext1”对的任何条目。
在此问题和以下答案中,此处的关键字是Pytorch
:
any
当然,如果您要求键的值为“ randomtext1”,则可以写.[]
| select( any(.input[];
type=="object" and has("$link") and (.["$link"] | index("randomtext1"))))
| .id
。