jq选择错误:“无法用字符串<object>索引字符串”

时间:2019-04-13 04:30:34

标签: json jq

命令:

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

我希望同时显示两个条目(ab),因为它们都包含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"
  }
]

1 个答案:

答案 0 :(得分:0)

  

我真正想要的是能够搜索在输入下至少具有一对“ $ link”:“ randomtext1”对的任何条目。

在此问题和以下答案中,此处的关键字是Pytorch

any

当然,如果您要求键的值为“ randomtext1”,则可以写.[] | select( any(.input[]; type=="object" and has("$link") and (.["$link"] | index("randomtext1")))) | .id