简体   繁体   English

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

[英]Extract inner array matching values using jq

My json is as shown below: 我的json如下所示:

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

Now, I want to capture only those ids who have dummy value of "This is dummy". 现在,我只想捕获具有虚拟值“ This is dummy”的那些id。 Some of the data may or may not have dummy and address fields. 某些数据可能具有也可能没有虚拟和地址字段。

I tried below but it gave me error "... cannot have their containment checked" 我在下面尝试过,但是给了我错误“ ...无法检查其收容条件”

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

Any help is much appreciated! 任何帮助深表感谢!

contains is quite tricky to use correctly. 正确使用contains非常棘手。 Since the requirement is: 由于要求是:

to capture only those ids who have dummy value of "This is dummy" 仅捕获那些具有虚拟值“ This is dummy”的ID

I would suggest: 我会建议:

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

or perhaps (depending on your detailed requirements): 或(取决于您的详细要求):

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM