2015-06-27 13 views
10

altındaki tüm anahtarların listesini alma GSON'u Java'da bir JSON ayrıştırıcısı olarak kullanıyorum, ancak anahtarlar her zaman aynı değil. Örneğin,
. Aşağıdaki JSON var:Java GSON: JSONObject

{ "Zaten bildiğim Nesne": {
"key1": "deger1",
"anahtar2": "deger2",
"AnotherObject": { " anotherKey1 ":" anotherValue1" , "anotherKey2": "anotherValue2"}
} zaten JSONObject nesnesi var

"zaten biliyoruz Object". Şimdi bu Nesne için tüm JSONElementleri almam gerekiyor, bu "Key1", "Key2" ve "AnotherObject" olacaktır.
Önceden teşekkürler.
DÜZENLEME: Çıktı Sen json içeriğini incelemek için izin bir ara yapı halinde Json dönüştürmek için JsonParser kullanabilirsiniz JSONObject nesnesi

+0

olası yinelenen [ Gson kullanarak bilinmeyen bir alan ile JSON nasıl çözülür?] (Http://stackoverflow.com/questions/20442265/how-tocode-json-with-unknown-field-using-gson) – pkubik

+0

bu yararlı olabilir http://stackoverflow.com/questions/14619811/retrieving-all-the-keys-in-a-nested-json-in-java –

+0

Nihai çıktınız ne olmalı? olmalı, "key1", "key2", "AnotherObject" '' '' Bildiğim Nesne ”," key1 "," key2 "," AnotherObject "' ?? –

cevap

38

için tüm anahtarlarla bir dize Dizi olmalıdır. Alternatif görünümlü iyi olarak

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 oldukça zor bir canavarıdır :) –

+1

Neden obj.keySet()? – Zon

+0

obj.keySet(), her google pakette muhtemelen bir tane gson-2.1 varsayılanı olmadığı için daha iyi bir seçenek – 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 beri Akımlar kullanabilirsiniz: GSON 2.8.1

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

itibariyle sen keySet() kullanabilirsiniz: ait

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

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

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