Obtenha o elemento raiz usando jsonpath com base na condição dos subelementos
Estou trabalhando com a biblioteca Jayway JsonPath para obter o 'id' correto abaixo do JSON, onde meu phoneNumbers
tipo é 'iPhone'.
Em geral, gostaria de saber como encontrar algo no elemento raiz de um bloco quando uma condição específica é especificada nos objetos sub-JSON.
Tentei as expressões abaixo que selecionam o bloco associado ao tipo de iPhone e também uma lista de ids respectivamente, mas não consigo chegar ao elemento raiz id
pertencente ao objeto JSON onde meu tipo de telefone é iPhone. Alguém pode me orientar? Preciso obter o id
como 1 para esta pergunta.
Para obter a lista de ids: $[*].id
Para obter o objeto json correspondente ao 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"
}
]
}
]
Respostas
Acho que você quer que sua expressão seja mais profunda.
Primeiro, encontre os objetos que têm um iPhone na lista de números de telefone. Em seguida, basta selecionar os IDs.
Experimente $[?(@.phoneNumbers[*].type=="iPhone")].id
.
Editar
Parece que a biblioteca Java JsonPath (acho que você está usando isso) oferece suporte a várias funções. Ele não lista um contains()
, mas você pode tentar o anyof
operador:
$[?(@.phoneNumbers[*].type anyof ["iPhone"])].id
Observe que isso é definitivamente específico da implementação e provavelmente não funcionará com nenhuma outra biblioteca.