Извлечь значения совпадения внутреннего массива с помощью jq - PullRequest
1 голос
/ 22 июня 2019

Мой json, как показано ниже:

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

Теперь я хочу захватить только те идентификаторы, которые имеют фиктивное значение «Это фиктивный».Некоторые из данных могут иметь или не иметь фиктивные и адресные поля.

Я пробовал ниже, но это дало мне ошибку "... не может быть проверено их содержание"

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

Любая помощьвысоко ценится!

1 Ответ

0 голосов
/ 22 июня 2019

contains довольно сложно использовать правильно. Поскольку требование:

для захвата только тех идентификаторов, которые имеют фиктивное значение "Это пустышка"

Я бы предложил:

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

или, возможно (в зависимости от ваших подробных требований):

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