I have got GSON as a JSON parser in Java, but the keys aren't always the same.
For example. I have the following JSON:
{ "The Object I already know": {
"key1":"value1",
"key2":"value2",
"AnotherObject": { "anotherKey1":"anotherValue1", "anotherKey2":"anotherValue2" }
}
I have already got the JSONObject "The Object I already know". Now I need to get all of the JSONElements for this Object, this would be "Key1", "Key2" and "AnotherObject".
Thanks in advance.
EDIT: The Output should be a String Array with all the keys for the JSONObject
You can use JsonParser to convert your Json into an intermediate structure which allow you to examine the json content.
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());
}
Since Java 8 you can use Streams as better looking 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);
As of Gson 2.8.1 you can use 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
来源:https://stackoverflow.com/questions/31094305/java-gson-getting-the-list-of-all-keys-under-a-jsonobject