Android JSONObject - Wie kann ich ein flaches JSON-Objekt durchlaufen, um jeden Schlüssel und Wert abzurufen?

103
{
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
}

Wie kann ich den Schlüssel und den Wert jedes Artikels erhalten, ohne vorher den Schlüssel oder den Wert zu kennen?

user1763763
quelle

Antworten:

312

Verwenden Sie den keys()Iterator, um alle Eigenschaften zu durchlaufen, und rufen Sie get()jede auf.

Iterator<String> iter = json.keys();
while (iter.hasNext()) {
    String key = iter.next();
    try {
        Object value = json.get(key);
    } catch (JSONException e) {
        // Something went wrong!
    }
}
Franci Penov
quelle
7
Hinweis: Sie können die Kurzform nicht für (String s: json.keys ()) {...} verwenden. Es ist wirklich schade, dass weder JSONArray noch JSONObject iterierbar sind. :-(
tu-Reinstate Monica-dor duh
Was ist Json hier? Json-Objekt, Json-Array oder sonst etwas?
Pravinsingh Waghela
2
@PravinsinghWaghela es ist ein JSONObject wie in der Frage angegeben
Nicolás Carrasco
66

Kurzfassung von Francis Antwort:

for(Iterator<String> iter = json.keys();iter.hasNext();) {
    String key = iter.next();
    ...
}
Roozbeh Zabihollahi
quelle
Was ist Json hier? Json-Objekt, Json-Array oder sonst etwas?
Pravinsingh Waghela
Json ist JsonObject
Roozbeh Zabihollahi
@PravinsinghWaghela ziemlich sicher, dass das OP gefragt hat, wie ein JSON-Objekt durchlaufen werden soll.
Denny
5

Sie müssen ein verwenden Iterator, um die Schlüssel zu durchlaufen, um ihre Werte zu erhalten.

Hier ist eine Kotlin-Implementierung. Sie werden feststellen, dass die Art und Weise, wie ich den String erhalten habe optString(), einen String oder einen nullbaren Wert erwartet.

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

Sie sollten die Methode keys()oder names()verwenden. keys()Sie erhalten einen Iterator, der alle String-Eigenschaftsnamen im Objekt enthält, während names()Sie ein Array aller wichtigen String-Namen erhalten.

Die JSONObject-Dokumentation finden Sie hier

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

Mike Brant
quelle