Ottieni l'elemento root utilizzando jsonpath in base alla condizione dei sottoelementi
Sto lavorando con la libreria Jayway JsonPath per ottenere l''id 'corretto da sotto JSON, dove il mio phoneNumbers
tipo è' iPhone '.
In generale, vorrei sapere come trovare qualcosa dall'elemento radice di un blocco quando una condizione specifica è specificata negli oggetti sub-JSON.
Ho provato di seguito espressioni che selezionano rispettivamente il blocco associato al tipo di iPhone e anche un elenco di ID, ma non sono in grado di accedere all'elemento radice id
appartenente all'oggetto JSON in cui il mio tipo di telefono è iPhone. Qualcuno può guidarmi per favore? Devo ottenere l' id
AS 1 per questa domanda.
Per ottenere l'elenco degli ID: $[*].id
Per ottenere l'oggetto json corrispondente al tipo di 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"
}
]
}
]
Risposte
Penso che tu voglia che la tua espressione sia più profonda.
Per prima cosa, trova gli oggetti che hanno un iPhone nell'elenco dei numeri di telefono. Quindi seleziona gli ID.
Prova $[?(@.phoneNumbers[*].type=="iPhone")].id
.
modificare
Sembra che la libreria Java JsonPath (penso che tu lo stia usando) supporti una serie di funzioni. Non elenca una contains()
, ma potresti provare l' anyof
operatore:
$[?(@.phoneNumbers[*].type anyof ["iPhone"])].id
Nota che questo è decisamente specifico dell'implementazione e probabilmente non funzionerà con nessun'altra libreria.