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

J’ai GSON comme parsingur JSON en Java, mais les clés ne sont pas toujours les mêmes.
Par exemple. J’ai le JSON suivant:

{“L’object que je connais déjà”: {
“clé1”: “valeur1”,
“clé2”: “valeur2”,
“AnotherObject”: {“anotherKey1”: “anotherValue1”, “anotherKey2”: “anotherValue2”}
}

J’ai déjà le JSONObject “L’object que je connais déjà”. Maintenant, je dois obtenir tous les droits JSONE pour cet object. Ce sont “Key1”, “Key2” et “AnotherObject”.
Merci d’avance.
EDIT: la sortie doit être un tableau de chaînes contenant toutes les clés de l’object JSONObject.

Vous pouvez utiliser JsonParser pour convertir votre Json en une structure intermédiaire vous permettant d’examiner le contenu de Json.

 Ssortingng 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> ensortinges = obj.entrySet();//will return members of your object for (Map.Entry entry: ensortinges) { System.out.println(entry.getKey()); } 

Depuis Java 8, vous pouvez utiliser Streams comme alternative plus esthétique:

 Ssortingng str = "{\"key1\":\"val1\", \"key2\":\"val2\"}"; JsonParser parser = new JsonParser(); JsonObject jObj = (JsonObject) parser.parse(str); List keys = jObj.entrySet() .stream() .map(i -> i.getKey()) .collect(Collectors.toCollection(ArrayList::new)); keys.forEach(System.out::println); 

A partir de Gson 2.8.1, vous pouvez utiliser keySet() :

 Ssortingng json = "{\"key1\":\"val\", \"key2\":\"val\"}"; JsonParser parser = new JsonParser(); JsonObject jsonObject = parser.parse(json).getAsJsonObject(); Set keys = jsonObject.keySet(); 
 Ssortingng str = "{\"key1\":\"val1\", \"key2\":\"val2\"}"; JsonParser parser = new JsonParser(); JsonObject jObj = (JsonObject)parser.parse(str); List keys = new ArrayList(); for (Entry e : jObj.entrySet()) { keys.add(e.getKey()); } // keys contains jsonObject's keys