【发布时间】:2019-04-13 04:30:34
【问题描述】:
命令:
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,并且命令中的过滤器希望在input 下的所有对象中看到$link,因此在命令有机会搜索b 之前它会出错进入。
我真正想要的是能够搜索在input 下至少有一对"$link": "randomtext1" 的任何条目。是否有更模糊的搜索功能可以让我实现这一目标?
我尝试使用两个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"
}
]
【问题讨论】: