2012-04-15 29 views
35

Tôi muốn lặp qua gói lớn JsonObject với Gson. Mục đích cuối cùng của tôi là lấy một số ArrayList của tất cả các số nguyên hiện có gồm ba chữ số code trong các đối tượng bên trong "unterfeld", nhưng điều đó sẽ không có vấn đề gì khi tôi có thể lặp qua các thuộc tính của đối tượng bên ngoài.Lặp lại các thuộc tính 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 
    } 
} 

Có cách nào gọn gàng để làm điều đó không?

+0

Câu hỏi đặt ra, cảm ơn bạn –

Trả lời

66

Bạn có thể sử dụng entrySet để lặp qua các thành viên ngoài cùng bên ngoài 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

Cảm ơn bạn rất nhiều trước hết. Nó có lẽ là sự thiếu hiểu biết của tôi về đối tượng Map, nhưng tôi nhận được một lỗi: Ngoại lệ trong thread "main" java.lang.Error: Vấn đề biên dịch chưa được giải quyết: Phương thức getAsJsonArray (String) là không xác định cho kiểu Map.Entry dotwin

+0

Tôi đã bỏ lỡ một cuộc gọi đến 'getValue' để kéo' JsonElement' khỏi 'Map.Entry'. –

+1

tuyệt vời, nó hoạt động ngay bây giờ. cảm ơn. – dotwin

Các vấn đề liên quan