web-dev-qa-db-fra.com

Java GSON: Obtention de la liste de toutes les clés sous un JSONObject

J'ai obtenu GSON en tant qu'analyseur JSON en Java, mais les clés ne sont pas toujours les mêmes.
Par exemple. J'ai le JSON suivant:

{"L'objet que je connais déjà": {
"clé1": "valeur1",
"clé2": "valeur2",
"AnotherObject": {"anotherKey1": "anotherValue1", "anotherKey2": "anotherValue2"}
}

J'ai déjà obtenu le JSONObject "L'objet que je connais déjà". Maintenant, je dois obtenir tous les JSONElements pour cet objet, ce serait "Key1", "Key2" et "AnotherObject".
Merci d'avance.
EDIT: La sortie doit être un tableau de chaînes avec toutes les clés du JSONObject

16
imthe666st

Vous pouvez utiliser JsonParser pour convertir votre Json en une structure intermédiaire qui vous permet d'examiner le contenu json.

String yourJson = "{your json here}";
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(yourJson);
JsonObject obj = element.getAsJsonObject(); //since you know it's a JsonObject
Set<Map.Entry<String, JsonElement>> entries = obj.entrySet();//will return members of your object
for (Map.Entry<String, JsonElement> entry: entries) {
    System.out.println(entry.getKey());
}
52
habsq

Depuis Java 8, vous pouvez utiliser Streams comme meilleure alternative:

String str = "{\"key1\":\"val1\", \"key2\":\"val2\"}";

JsonParser parser = new JsonParser();
JsonObject jObj = (JsonObject) parser.parse(str);

List<String> keys = jObj.entrySet()
    .stream()
    .map(i -> i.getKey())
    .collect(Collectors.toCollection(ArrayList::new));

keys.forEach(System.out::println);
15
Jaxt0r

Depuis Gson 2.8.1, vous pouvez utiliser keySet():

String json = "{\"key1\":\"val\", \"key2\":\"val\"}";

JsonParser parser = new JsonParser();
JsonObject jsonObject = parser.parse(json).getAsJsonObject();

Set<String> keys = jsonObject.keySet();
6
Michal Tenenberg
String str = "{\"key1\":\"val1\", \"key2\":\"val2\"}";

        JsonParser parser = new JsonParser();
        JsonObject jObj = (JsonObject)parser.parse(str);

        List<String> keys = new ArrayList<String>();
        for (Entry<String, JsonElement> e : jObj.entrySet()) {
            keys.add(e.getKey());
        }

        // keys contains jsonObject's keys
4
Raman Shrivastava