Obtenir l'élément racine à l'aide de jsonpath en fonction de la condition des sous-éléments
Je travaille avec la bibliothèque Jayway JsonPath pour obtenir le bon «id» sous JSON où mon phoneNumbers
type est «iPhone».
En général, j'aimerais savoir comment trouver quelque chose à partir de l'élément racine d'un bloc lorsqu'une condition spécifique est spécifiée dans les objets sous-JSON.
J'ai essayé les expressions ci-dessous qui sélectionnent le bloc associé au type d'iPhone et également une liste d'identifiants respectivement, mais je ne suis pas en mesure d'accéder à l'élément racine id
appartenant à l'objet JSON où mon type de téléphone est iPhone. Quelqu'un peut-il me guider s'il vous plaît? J'ai besoin d'obtenir le id
1 pour cette question.
Pour obtenir la liste des identifiants: $[*].id
Pour obtenir l'objet json correspondant au type d'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"
}
]
}
]
Réponses
Je pense que vous voulez que votre expression soit plus profonde.
Tout d'abord, recherchez les objets qui ont un iPhone dans la liste des numéros de téléphone. Ensuite, sélectionnez simplement les ID.
Essayez $[?(@.phoneNumbers[*].type=="iPhone")].id
.
Éditer
Il semble que la bibliothèque Java JsonPath (je pense que vous l'utilisez) prend en charge un certain nombre de fonctions. Il ne répertorie pas a contains()
, mais vous pouvez essayer l' anyof
opérateur:
$[?(@.phoneNumbers[*].type anyof ["iPhone"])].id
Notez que ceci est certainement spécifique à l'implémentation et ne fonctionnera probablement pas avec une autre bibliothèque.