jq选择并包含错误:无法检查null(null)和字符串(“ randomtext1”)的包含

时间:2019-04-13 01:13:19

标签: select jq containment

命令:

  

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

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

错误:

  

jq:错误(在11处):null(空)和字符串(“ 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"
}]

1 个答案:

答案 0 :(得分:0)

过滤器:

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

产生:

"a"
"b"

但是请注意,contains的语义非常复杂,因此最好使用index来代替。