jq select и содержит ошибку: null (null) и string ("randomtext1") нельзя проверить их содержимое - PullRequest
0 голосов
/ 13 апреля 2019

команда:

кошка test.json | jq -r '. [] | select (. ["$ link"] | содержит ("randomtext1")). id '

Я ожидал, что оба идентификатора (a и b) появятся в результате выполнения вышеупомянутой команды, так как они оба содержат текст randomtext1 под "input" | "obj1" | "$ link" и "input" | "obj3" | "$ ссылку".

ошибка:

jq: error (at: 11): null (null) и string ("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 голосов
/ 13 апреля 2019

Фильтр:

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

производит:

"a"
"b"

Обратите внимание, однако, что contains имеет очень сложную семантику, поэтому, вероятно, было бы лучше использовать indexвместо.

...