2012-04-15 102 views
35

我想遍歷大包裝JsonObjectGson。我的最終目標是獲得內部"unterfeld"對象中所有現有三位數code整數的ArrayList,但是一旦我可以迭代外部對象的屬性,這將不會有問題。迭代JsonObject屬性

{ 
    "something1": { 
    "bezeichnung": "something1", 
    "unterfeld": [ 
     { 
     "bezeichnung": "bla1", 
     "unterregionen": [ 
     ], 
     "code": 111 
     }, 
     { 
     "bezeichnung": "bla2", 
     "unterregionen": [ 
     ], 
     "code": 222 
     } 
    ], 
    "code": 3 
    }, 
    "something2": { 
    "bezeichnung": "something2", 
    "unterfeld": [ 
     { 
     "bezeichnung": "bla3", 
     "unterregionen": [ 
     ], 
     "code": 333 
     } 
    ], 
    "code": 6 
    }, 
    "something3": { 
    "bezeichnung": "something3", 
    "unterfeld": [ 
     { 
     "bezeichnung": "bla4", 
     "unterregionen": [ 
     ], 
     "code": 444 
     }, 
     { 
     "bezeichnung": "bla5", 
     "unterregionen": [ 
     ], 
     "code": 555 
     }, 
     { 
     "bezeichnung": "bla6", 
     "unterregionen": [ 
     ], 
     "code": 666 
     } 
    ], 
    "code": 9 
    } 
} 

是否有任何干淨的方法可以做到這一點?

+0

有問題的問題,謝謝 – 2018-01-19 18:56:55

回答

66

您可以使用entrySet來遍歷最外面的JsonObject的成員。

JsonObject object; 
ArrayList<Integer> codes = new ArrayList<Integer>(); 
for (Map.Entry<String,JsonElement> entry : object.entrySet()) { 
    JsonArray array = entry.getValue().getAsJsonObject().getAsJsonArray("unterfeld"); 
    for (JsonElement codeHolder : array) { 
     codes.add(codeHolder.getAsJsonObject().getAsJsonPrimitive("code").getAsInt()); 
    } 
} 
+1

非常感謝。這可能是我對Map對象缺乏瞭解,但是出現錯誤: 線程「main」中的異常java.lang.Error:未解決的編譯問題: 未定義類型爲Map.Entry的方法getAsJsonArray(String) dotwin 2012-04-15 19:29:35

+0

我錯過了對'getValue'的調用,從'Map.Entry'中拉出'JsonElement'。 – 2012-04-15 19:32:59

+1

真棒,它現在起作用。謝謝。 – dotwin 2012-04-15 19:59:47