使用jq提取内部数组匹配值

时间:2019-06-22 02:41:14

标签: json jq

我的json如下所示:

[
[
    {
        "id": "abcd"
    },
    {
        "address": [
            "140 Deco st"
        ]
    }
],
[
    {
        "id": "xyz"
    },
    {
        "dummy": "This is dummy"
    }
],
[
    {
        "id": "12356"
    },
    {
        "address": [
            "140 Deco st"
        ]
    }
]]

现在,我只想捕获具有虚拟值“ This is dummy”的那些id。某些数据可能具有也可能没有虚拟和地址字段。

我在下面尝试过,但给了我错误“ ...无法检查其收容条件”

jq -c '.[] | .[] | select(.dummy | contains("This is dummy")) | .[] | .id'

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

contains很难正确使用。由于要求是:

  

仅捕获那些具有“ This is dummy”虚拟值的ID

我建议:

.[]
| select( any(.[]; .dummy == "This is dummy") )
| add
| .id

或者(取决于您的详细要求):

.[]
| select( any(.[]; .dummy == "This is dummy") )
| .[]
| .id? // empty