JQ: выберите значение свойства с помощью регулярных выражений - PullRequest
0 голосов
/ 02 июля 2018

У меня есть следующий объект json:

{
    "foo": {
        "name": "Name 1",
        "color": "green",
        "something_else": {
            "name" : "Name 2"
        }

    },
    "bar": {
        "name": "Something else",
        "color": "red"
    }
}

Чтобы получить все возможные родительские свойства свойства, называемого «имя», используя jq, я попытался:

path(recurse|select(.name? !=""))[0] 

И это работает и отдай:

"foo"
"foo"
"bar"

Теперь я хочу применить регулярное выражение для фильтрации значения свойства, скажем, я хочу рассмотреть только все свойства, называемые name, которые имеют значение, начинающееся с «Имя» и сопровождаемое числом, таким как "Name 2", чтобы получить:

"foo"
"foo"

Я пробовал это:

path(recurse|select(.name? =~ match(/Name */)))[0] 

Как использовать сопоставление и как правильно разместить его внутри запроса?

1 Ответ

0 голосов
/ 02 июля 2018

Вы можете использовать paths/1 вместо path, потому что первый игнорирует нулевые пути. Также с path необходимо добавить логику фильтра, чтобы игнорировать null, который не соответствует ни одному из условий регулярного выражения

paths(select(.name? | match("Name [0-9]")))[0]

См. jq - документирование - paths / 1

...