2017-09-26 5 views
2

J'ai un JSONArray dans un JSONArray, je veux appliquer l'expression JSONPath de telle sorte que j'obtiens JSONObject ou JSONArray comme résultat quand une condition est satsifiée sur le JSONArray interne.json-path: Filtrer l'enfant d'un tableau dans un autre tableau

Par exemple:

{ 
    "A": [ 
    { 
     "B": [ 
     { 
      "id": 1 
     }, 
     { 
      "id": 2 
     }, 
     { 
      "id": 3 
     } 
     ], 
     "C": { 
     "id": 10, 
     "name": "PQR" 
     }, 
     "id": 25, 
     "name": "XYZ" 
    }, 
    { 
     "B": [ 
     { 
      "id": 4 
     }, 
     { 
      "id": 5 
     }, 
     { 
      "id": 6 
     } 
     ], 
     "C": { 
     "id": 15, 
     "name": "PQR" 
     }, 
     "id": 20, 
     "name": "XYZ" 
    } 
    ] 
} 

si je veux tous les éléments de A où C.id = 10, j'utiliser: $.A[?(@.C.id == 10)]

Maintenant, quel prédicat doit être utilisé pour obtenir tous les objets dans A, où B.id = 1 ? Remarque: B est un tableau d'objets JSON.

Répondre

0

J'ai eu du succès avec $.A[?(@.B[?(@.id == 1)])]

mais seulement lors de l'utilisation de la mise en œuvre Gatling Scala: http://jsonpath.herokuapp.com/

La mise en œuvre Jayway semble ignorer totalement le filtre intérieur et selon un issue sur leur GitHub, c'est un bug.

+0

Vous avez raison, avec Gatling ça a marché pour moi. Mais j'utilise la librairie Jayway, Es-tu sûr que c'est une limitation? –

+0

@VishalMahuli a mis à jour la réponse, cela ressemble à un bug. –