JSONPath объединение нескольких разных путей - PullRequest
1 голос
/ 03 апреля 2019

Я пытаюсь создать одиночный запрос JSONPath , который будет проверять существование двух или более путей .

Давайте рассмотрим следующий пример документа:

{
          "firstName": "John",
          "lastName" : "doe",
          "age"      : 26,
          "address"  : {
            "streetAddress": "naist street",
            "city"         : "Nara",
            "postalCode"   : "630-0192"
          },
          "phoneNumbers": [
            {
              "type"  : "iPhone",
              "number": "0123-4567-8888"
            },
            {
              "type"  : "home",
              "number": "0123-4567-8910"
            }
          ]
}

Итак, я нашел:

$..[firstName,lastName,type]

И получил все эти элементы из всего документа.

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

 $.firstName 
 $.address.city

Можно ли это сделать с помощью одного запроса JSONPath?Я не могу написать что-то вроде:

$.[firstName,address.city]

С XML и XPath я мог бы написать:

/person/firstname | /person/address/city

и получить объединение всех соответствующих элементов XML.

Могу ли ясделать то же самое с JSONPath?

1 Ответ

1 голос
/ 04 апреля 2019

Я думаю, что в исходном JSONPath вы можете использовать рекурсивный спуск и объединение, т. Е.

$..['firstName','city']

Реализация Goessner вернет

[
   "John",
   "Nara"
]

kubernetes JSONPath поддерживает расширение оператора объединения, что позволяет

[‘metadata.name’, ‘status.capacity’]

, где name и capacity являются членами metadata и status.

JSONMatch , который является вариантом JSONPath и первоначально основан на синтаксическом анализаторе JSONPath Kubernetes, поддерживает объединение совершенно разных путей, например

[employee[5].name, company.name, wageTiers[compensation > 10000]]

JSONMatch доступен в go , и я верю javascript также.

Библиотека jsoncons C ++ v0.123.0 поддерживает объединение JSONPath полностью отдельных путей, включая

$..[firstName,address.city]
...