jq select and contains错误:null(null)和字符串(“randomtext1”)不能检查其包含

jq select and contains错误:null(null)和字符串(“randomtext1”)不能检查其包含,select,jq,containment,Select,Jq,Containment,命令: cat test.json | jq-r.[]| select([“$link”]| contains(“randomtext1”)).id' 我希望上述命令会显示两个ID(a和b),因为它们都在“input”|“obj1”|“$link”和“input”|“obj3”|“$link”下包含randomtext1文本 错误: jq:error(at:11):null(null)和string(“randomtext1”)不能检查它们的包含 分析错误:第11行第2列“,”之前的预期值 我看

命令:

cat test.json | jq-r.[]| select([“$link”]| contains(“randomtext1”)).id'

我希望上述命令会显示两个ID(a和b),因为它们都在“input”|“obj1”|“$link”和“input”|“obj3”|“$link”下包含randomtext1文本

错误:

jq:error(at:11):null(null)和string(“randomtext1”)不能检查它们的包含 分析错误:第11行第2列“,”之前的预期值

我看到“$link”对象在“input”和“obj#”对象中。我该如何指定它们,还是需要指定它们?错误消息似乎指向其他内容。此外,在记录中只有“input”和“$link”是常量,“obj#”的名称可以更改,这使得它们是随机的

test.json文件:

[{
      "input": {
            "obj1": {
                "$link": "randomtext1"
            }, 
            "obj2": {
                "$link": "randomtext2"
            }
      },
      "id": "a"
},
{
      "input": {
            "obj3": {
                "$link": "randomtext1"
            }, 
            "obj4": {
                "$link": "randomtext3"
            }
      },
      "id": "b"
}]
过滤器:

.[]
| select(.input[] | .["$link"] | contains("randomtext1")) 
| .id
产生:

"a"
"b"
但是,请注意,
包含
具有非常复杂的语义,因此最好使用
索引

过滤器:

.[]
| select(.input[] | .["$link"] | contains("randomtext1")) 
| .id
产生:

"a"
"b"

但是,请注意,
包含
具有非常复杂的语义,因此最好使用
索引

谢谢@peak。通过在文件开头和结尾添加方括号进行修复。谢谢@peak。通过在文件的开头和结尾添加方括号进行修复。