JMESPath - невозможно запросить значение в списке в другом списке

Учитывая следующий JSON:

[
  {
    "json": {
       "buildInfo": [
         {
           "first": "James",
           "last": "d"
         },
         {
           "first": "James2",
           "last": "d2"
         }
       ]
     },
     "status": 200
   },
   {
    "json": {
       "buildInfo": [
         {
           "first": "Jacob",
           "last": "e"
         },
         {
           "first": "Jacob2",
           "last": "e2"
         }
       ]
    },
    "status": 200
  }
]

Я пытаюсь запросить ключ внутреннего списка json.buildInfo."last" для значения, чтобы затем извлечь число значений ключа, т.е. json.buildInfo.*."first". ОДНАКО я изо всех сил пытаюсь заставить это работать.

Я могу найти данные, используя оператор выравнивания...

[*].json.build[].last[contains(@,`d`)]

... но я не могу понять, как выполнить запрос, который затем позволит мне получить «первый» ключ списка дополнительной информации. В json без внутреннего списка в buildInfo я могу сделать что-то вроде

[?json.buildInfo.last==`d`].json.buildInfo.first

Переход к списку элементов buildInfo оказывается сложной задачей.

Может ли кто-нибудь дать мне руководство здесь?

Спасибо


person Gareth    schedule 06.12.2019    source источник
comment
Я только что заставил это работать для запроса [?json.buildInfo[?contains(last,d2)]], но тогда я не уверен, как извлечь только один соответствующий блок, которому соответствует d2, как показано выше, чтобы вернуть весь блок buildInfo, содержащий его, который также включает другой.   -  person Gareth    schedule 06.12.2019


Ответы (1)


ОК, это работает, но не уверен, что знаю, почему...

[?json.buildInfo[?содержит(последний,'d2')]].json.build_info[]|[?last=='d'].first

person Gareth    schedule 06.12.2019