2012-04-15 15 views
35

मैं Gson के साथ बड़े रैपिंग JsonObject के माध्यम से पुन: प्रयास करना चाहता हूं। मेरा अंतिम उद्देश्य आंतरिक "unterfeld" ऑब्जेक्ट्स में सभी मौजूदा तीन अंकों code पूर्णांकों के ArrayList प्राप्त करना है, लेकिन बाहरी वस्तु के गुणों के माध्यम से पुन: सक्रिय होने पर यह कोई समस्या नहीं होगी।JsonObject गुणों पर Iterate

{ 
    "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

अच्छी तरह से सवाल उठाया गया, धन्यवाद –

उत्तर

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

धन्यवाद सबसे पहले। शायद यह मैप ऑब्जेक्ट की समझ की कमी है, लेकिन मुझे एक त्रुटि मिलती है: थ्रेड "मुख्य" java.lang.Error में अपवाद: अनसुलझा संकलन समस्या: विधि प्राप्त करें AsJsonArray (स्ट्रिंग) प्रकार के लिए अपरिभाषित है Map.Entry <स्ट्रिंग, जेसन एलिमेंट> – dotwin

+0

मुझे 'Map.Entry' से 'JsonElement' खींचने के लिए' getValue' 'पर एक कॉल याद आई। –

+1

कमाल, यह अब काम करता है। धन्यवाद। साथ JsonArray सरणी ' = entry.getValue();। – dotwin

संबंधित मुद्दे