Obtenir une valeur par clé dans un tableau JSON

Obtenir une valeur par clé dans un tableau JSON

1. Vue d'ensemble

JSON est un format d'échange de données léger et indépendant de la langue utilisé pour la plupart des communications client-serveur.

JSONObject etJSONArray sont les deux classes courantes généralement disponibles dans la plupart des bibliothèques de traitement JSON. A JSONObject stores unordered key-value pairs, un peu comme une implémentation JavaMap. A JSONArray, on the other hand, is an ordered sequence of values un peu comme unList ou unVector en Java.

Dans ce didacticiel, nous allons utiliser la bibliothèqueJSON-Java (org.json) et apprendre à traiter unJSONArray pour extraire la valeur d'une clé donnée. Si nécessaire, nous avonsan introduction disponibles pour cette bibliothèque.

2. Dépendance Maven

Nous commencerons par ajouter la dépendance ci-dessous dans notre POM:


    org.json
    json
    20180813

Nous pouvons toujours trouver la dernière version deJSON-Java surMaven Central.

3. Accumulation de contexte

Un message JSON est généralement composé d'objets et de tableaux JSON qui peuvent être imbriqués les uns dans les autres. Un objetJSONArray est entouré de crochets[ ] alors qu'un objetJSONObject est entouré d'accolades\{}. Par exemple, considérons ce message JSON:

[
    {
        "name": "John",
        "city": "chicago",
        "age": "22"
    },
    {
        "name": "Gary",
        "city": "florida",
        "age": "35"
    },
    {
        "name": "Selena",
        "city": "vegas",
        "age": "18"
    }
]

De toute évidence, il s’agit d’un tableau d’objets JSON. Chaque objet JSON de ce tableau représente notre enregistrement client ayanta name, age, etcity comme attributs ou clés.

4. TraitementJSONArray

Etant donné le JSON ci-dessus, si nous souhaitons connaître le nom de tous nos clients? En d'autres termes, étant donné une clé,“name” dans notre exemple, comment pouvons-nous trouver toutes les valeurs mappées à cette clé dans un tableau JSON donné?

Comme nous le savons, unJSONArray est une liste d'objets JSON. Alors, recherchons toutes les valeurs pour une clé donnée:

public List getValuesForGivenKey(String jsonArrayStr, String key) {
    JSONArray jsonArray = new JSONArray(jsonArrayStr);
    return IntStream.range(0, jsonArray.length())
      .mapToObj(index -> ((JSONObject)jsonArray.get(index)).optString(key))
      .collect(Collectors.toList());
}

Dans l'exemple précédent:

  • Tout d'abord, nous parcourons la liste complète des objets d'un tableau JSON

  • Ensuite, pour chaqueJSONObject, nous obtenons la valeur mappée à la clé donnée

De plus, la méthodeoptString() renvoie une chaîne vide si aucune clé de ce type n'existe.

En appelantgetValuesForGivenKey(jsonArrayStr, “name”)jsonArrayStr est notre exemple de JSON, nous obtiendrons unList de tous les noms en sortie:

[John, Gary, Selena]

5. Conclusion

Dans cet article rapide, nous avons appris à analyser unJSONArray pour obtenir toutes les valeurs mappées pour une clé donnée. Ici, nous avons utilisé la bibliothèqueJSON-Java (org.json).

JSON.simple est une autre alternative similaire et puissante pour travailler avec JSON en Java. S'il vous plaît n'hésitez pas à explorer.

Comme d'habitude, le code source complet est disponibleover on Github.