Команда:
cat test.json | jq -r '.[] | select(.input[] | .["$link"] | contains("randomtext1")) | .id'
Я ожидал увидеть обе записи (a
и b
), поскольку они обе содержат 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"
}
]