JSON парсинг [`jq`]: получить значение брата деда и бабушки - PullRequest
3 голосов
/ 19 января 2020

Пример

{
  "gp_sibling": "desired_value",
  "grand-parent": {
    "parent": [
      {
        "key": "known_value",
        "sibling": "asdf"
      }
    ]
  }
}

Определение проблемы

У меня большой JSON. Я знаю, что key имеет уникальную ценность. Мне нужно получить значение ключа родного брата (значение ключа gp_sibling).

Теперь я могу grep JSON, но я бы хотел использовать jq. Но я не знаю, как этого добиться (я использую jq только для простых запросов).

Примечания

Хотя я знаю, что jq можно использовать и на Windows, Я использую его только на Linux.

Опубликовать обновления

  1. Удалены запятые из примера. Некоторые исправления форматирования.

Ответы [ 2 ]

0 голосов
/ 19 января 2020

Мое чтение вопроса состоит в том, что ни одно из имен ключей, кроме «ключа», не должно использоваться в запросе, и что если бы было более одного «родного брата и дедушки», который был бы строкой, мы бы хотели их все.

paths(.key? == "known_value") as $p
| getpath($p[0:-4])
| .[]
| select(type=="string")
0 голосов
/ 19 января 2020

Если вы просто хотите получить элемент gb_sibling, вы можете использовать следующее:

jq .gp_sibling <file>

Если вы хотите получить его, только если есть элемент key с его значением, вы может попробовать это:

jq 'select(."grand-parent"?.parent?[]?.key=="known_value")|.gp_sibling' <file>

Это, он фильтрует элементы, где содержимое атрибута key внутри parent внутри grand-parent равно known_value.

Из этого результата , gp_sibling выбрано.

[ ПРИМЕЧАНИЕ ]

grand-parent указано в кавычках, так как в противном случае da sh может вызвать проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...