Android JSONObject - Jak mogę przejść przez płaski obiekt JSON, aby uzyskać każdy klucz i wartość

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

Jak mogę uzyskać klucz i wartość każdego elementu bez wcześniejszej znajomości klucza ani wartości?

user1763763
źródło

Odpowiedzi:

313

Użyj keys()iteratora, aby iterować po wszystkich właściwościach i wywołać get()każdą z nich.

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
źródło
7
Uwaga: nie możesz użyć krótkiej formy dla (String s: json.keys ()) {...} Szkoda, że ​​ani JSONArray, ani JSONObject nie są iterowalne. :-(
tu-Reinstate Monica-dor duh
co jest tutaj json? Json Object, Json Array czy coś jeszcze?
Pravinsingh Waghela
2
@PravinsinghWaghela to JSONObject, jak określono w pytaniu
Nicolás Carrasco
67

Krótka wersja odpowiedzi Franci:

for(Iterator<String> iter = json.keys();iter.hasNext();) {
    String key = iter.next();
    ...
}
Roozbeh Zabihollahi
źródło
co jest tutaj json? Json Object, Json Array czy coś jeszcze?
Pravinsingh Waghela
json to JsonObject
Roozbeh Zabihollahi
@PravinsinghWaghela jest prawie pewien, że OP zapytał, jak wykonać pętlę przez obiekt json.
Denny
5

Musisz użyć Iterator do zapętlenia kluczy, aby uzyskać ich wartości.

Oto implementacja Kotlina, zdasz sobie sprawę, że sposób, w jaki otrzymałem ciąg, wykorzystuje optString(), który oczekuje wartości String lub wartości null.

val keys = jsonObject.keys()
while (keys.hasNext()) {
    val key = keys.next()
    val value = targetJson.optString(key)        
}
Morgan Koh
źródło
3

Należy użyć metody keys()lub names(). keys()da ci iterator zawierający wszystkie nazwy właściwości String w obiekcie, podczas gdy names()da ci tablicę wszystkich kluczowych nazw String.

Możesz pobrać dokumentację JSONObject tutaj

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

Mike Brant
źródło