Android JSONObject - ฉันจะวนซ้ำออบเจ็กต์ JSON แบบแบนเพื่อรับแต่ละคีย์และค่าได้อย่างไร


คำตอบ:


313

ใช้ตัวkeys()วนซ้ำเพื่อวนซ้ำคุณสมบัติทั้งหมดและเรียกget()ใช้แต่ละคุณสมบัติ

Iterator<String> iter = json.keys();
while (iter.hasNext()) {
    String key = iter.next();
    try {
        Object value = json.get(key);
    } catch (JSONException e) {
        // Something went wrong!
    }
}

7
หมายเหตุ: คุณไม่สามารถใช้รูปแบบย่อสำหรับ (String s: json.keys ()) {... } เป็นเรื่องน่าเสียดายอย่างยิ่งที่ทั้ง JSONArray หรือ JSONObject ไม่สามารถทำซ้ำได้ :-(
tu-Reinstate Monica-dor duh

json ที่นี่คืออะไร? Json Object, Json Array หรือ anthing อื่น ๆ ?
Pravinsingh Waghela

2
@PravinsinghWaghela เป็น JSONObject ตามที่ระบุไว้ในคำถาม
Nicolás Carrasco

66

คำตอบสั้น ๆ ของ Franci:

for(Iterator<String> iter = json.keys();iter.hasNext();) {
    String key = iter.next();
    ...
}

json ที่นี่คืออะไร? Json Object, Json Array หรือ anthing อื่น ๆ ?
Pravinsingh Waghela

json คือ JsonObject
Roozbeh Zabihollahi

@PravinsinghWaghela ค่อนข้างแน่ใจว่า OP ถามวิธีการวนซ้ำวัตถุ json
Denny

5

คุณจะต้องใช้Iteratorปุ่มเพื่อวนซ้ำเพื่อรับค่า

นี่คือการใช้งาน Kotlin คุณจะรู้ว่าวิธีที่ฉันได้รับสตริงนั้นใช้optString()ซึ่งคาดว่าจะเป็น String หรือค่า nullable

val keys = jsonObject.keys()
while (keys.hasNext()) {
    val key = keys.next()
    val value = targetJson.optString(key)        
}

3

คุณ shold ใช้keys()or names()method keys()จะให้ตัววนซ้ำที่มีชื่อคุณสมบัติ String ทั้งหมดในออบเจ็กต์ในขณะที่names()จะให้อาร์เรย์ของชื่อคีย์สตริงทั้งหมด

คุณสามารถรับเอกสาร JSONObject ได้ที่นี่

http://developer.android.com/reference/org/json/JSONObject.html


-2

ดูการอ้างอิง JSONObject:

http://www.json.org/javadoc/org/json/JSONObject.html

โดยไม่ต้องใช้วัตถุจริงๆดูเหมือนว่าการใช้ getNames () หรือ keys () ซึ่งส่งคืน Iterator เป็นวิธีที่จะไป


1
ลิงค์ผิด JSONObjectใน Android getNames()ไม่ได้ developer.android.com/reference/org/json/JSONObject.html
Weetu
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.