Obtenga el elemento raíz usando jsonpath según la condición de los subelementos
Estoy trabajando con la biblioteca Jayway JsonPath para obtener la 'identificación' correcta desde debajo de JSON donde mi phoneNumbers
tipo es 'iPhone'.
En general, me gustaría saber cómo encontrar algo del elemento raíz de un bloque cuando se especifica una condición específica en los objetos sub-JSON.
Intenté las siguientes expresiones que seleccionan el bloque asociado con el tipo de iPhone y también una lista de identificadores respectivamente, pero no puedo llegar al elemento raíz que id
pertenece al objeto JSON donde mi tipo de teléfono es iPhone. ¿Alguien puede guiarme? Necesito obtener el id
as 1 para esta pregunta.
Para obtener la lista de identificadores: $[*].id
Para obtener el objeto json correspondiente al tipo de 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"
}
]
}
]
Respuestas
Creo que quieres que tu expresión se vea más profunda.
Primero, busque los objetos que tienen un iPhone en la lista de números de teléfono. Luego, simplemente seleccione las ID.
Prueba $[?(@.phoneNumbers[*].type=="iPhone")].id
.
Editar
Parece que la biblioteca Java JsonPath (creo que estás usando esto) admite una serie de funciones. No enumera a contains()
, pero puede probar el anyof
operador:
$[?(@.phoneNumbers[*].type anyof ["iPhone"])].id
Tenga en cuenta que esto definitivamente es específico de la implementación y es probable que no funcione con ninguna otra biblioteca.