2015-06-27 37 views
10

我已经将GSON用作Java中的JSON解析器,但密钥并不总是相同。例如,
。我有以下的JSON:Java GSON:获取JSONObject下所有密钥的列表

{ “我已经知道了对象”:{
“KEY1”: “值1”,
“KEY2”: “值2”,
“AnotherObject”:{“ anotherKey1 “:” anotherValue1" , “anotherKey2”: “anotherValue2”}
}

我已经得到了JSONObject的 “我已经知道了对象”。现在我需要获取该对象的所有JSON元素,这将是“Key1”,“Key2”和“AnotherObject”。
在此先感谢。
编辑:输出应该是一个字符串数组与JSONObject的所有键

+0

的可能重复[如何使用Gson解码未知字段的JSON?](http://stackoverflow.com/questions/20442265/how-to-decode-json-with-unknown-field-using-gson) – pkubik

+0

这可能是有用的http://stackoverflow.com/questions/14619811/retrieving-all-the-keys-in-a-nested-json-in-java –

+0

什么应该是你的最终输出?它应该是,“key1”,“key2”,“AnotherObject”或“我已经知道的对象”,“key1”,“key2”,“AnotherObject”'? –

回答

38

您可以使用JsonParser将您的Json转换为允许您检查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()); 
} 
+0

JsonParser是一个相当棘手的小野兽:) –

+1

为什么不obj.keySet()? – Zon

+0

obj.keySet()似乎是一个更好的选择 – mkamioner

4
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 
10

由于Java 8,你可以使用流为更好地寻找替代方案:

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); 
4

由于GSON 2.8.1您可以使用keySet()

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

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

Set<String> keys = jsonObject.keySet();