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
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());
}
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);
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();
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