jq - найти родительский элемент на основе результатов поиска по дочернему элементу - PullRequest
0 голосов
/ 20 сентября 2018

Для следующего файла json мне нужно получить элемент 'name' на основе результатов поиска для этой конкретной записи

Например: json.txt

{
  "regions": {
    "var1": {
      "name": "City 1",
      "domains": {
        "var3": {
          "Owner": "Joe"
        }
      }
    },
    "var2": {
      "name": "City 2",
      "domains": {
        "var4": {
          "Owner": "Brown"
        }
      }
    }
  }
}

Я пытался

$ jq --arg arg1 'var4' '.regions | if (to_entries[].value.domains[$arg1]) then to_entries[].value.name else empty end' json.txt

но это возвращает

"City 1"
"City 2"

Я хочу, чтобы результат получал только

"City 2"

Любая помощь будет принята с благодарностью

1 Ответ

0 голосов
/ 20 сентября 2018

Вы должны потянуть to_entries[] за пределы предложения if ... then ... else ... end:

.regions | to_entries[] | if .value.domains[$arg1] then .value.name else empty end

Это можно сократить до:

.regions | to_entries[] | .value | select(.domains[$arg1]) | .name
...