Получить корневой элемент с помощью jsonpath на основе условия подэлементов
Я работаю с библиотекой Jayway JsonPath, чтобы получить правильный «идентификатор» снизу JSON, где мой phoneNumbers
тип - «iPhone».
В общем, я хотел бы знать, как найти что-то в корневом элементе блока, когда в суб-объектах JSON указано конкретное условие.
Я пробовал следующие выражения, которые выбирают блок, связанный с типом iPhone, а также список идентификаторов соответственно, но я не могу добраться до корневого элемента, id
принадлежащего объекту JSON, где мой тип телефона - iPhone. Кто-нибудь может помочь мне? Мне нужно получить id
1 для этого вопроса.
Чтобы получить список идентификаторов: $[*].id
Чтобы получить объект json, соответствующий типу iPhone: $[*].phoneNumbers[?(@.type=='iPhone')]
[
{
"id": "1",
"phoneNumbers": [
{
"type": "iPhone",
"number": "0123-4567-8888"
},
{
"type": "home",
"number": "0123-4567-8910"
}
]
},
{
"id": "2",
"phoneNumbers": [
{
"type": "x",
"number": "0123-4567-8888"
},
{
"type": "y",
"number": "0123-4567-8910"
}
]
}
]
Ответы
Я думаю, вы хотите, чтобы ваше выражение лица выглядело глубже.
Сначала найдите в списке телефонных номеров объекты, у которых есть iPhone. Затем просто выберите идентификаторы.
Попробуй $[?(@.phoneNumbers[*].type=="iPhone")].id
.
Редактировать
Похоже, что библиотека Java JsonPath (я думаю, вы ее используете) поддерживает ряд функций. Он не перечисляет a contains()
, но вы можете попробовать anyof
оператор:
$[?(@.phoneNumbers[*].type anyof ["iPhone"])].id
Обратите внимание, что это определенно зависит от реализации и, скорее всего, не будет работать с какой-либо другой библиотекой.