Android JSONObject: ¿Cómo puedo recorrer un objeto JSON plano para obtener cada clave y valor?

Respuestas:

313

Utilice el keys()iterador para iterar sobre todas las propiedades y llameget() a cada una.

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
fuente
7
Nota: No puede usar la forma corta para (String s: json.keys ()) {...} Es una verdadera lástima que ni JSONArray ni JSONObject sean iterables. :-(
tu-Restablecer Monica-dor duh
¿Qué es json aquí? Json Object, Json Array u otra cosa?
Pravinsingh Waghela
2
@PravinsinghWaghela es un JSONObject como se especifica en la pregunta
Nicolás Carrasco
66

Versión corta de la respuesta de Franci:

for(Iterator<String> iter = json.keys();iter.hasNext();) {
    String key = iter.next();
    ...
}
Roozbeh Zabihollahi
fuente
¿Qué es json aquí? Json Object, Json Array u otra cosa?
Pravinsingh Waghela
json es JsonObject
Roozbeh Zabihollahi
@PravinsinghWaghela bastante seguro de que el OP preguntó cómo recorrer un objeto json.
Denny
5

Necesitarás usar un Iterator para recorrer las claves para obtener sus valores.

Aquí hay una implementación de Kotlin, se dará cuenta de que la forma en que obtuve la cadena está usando optString(), que espera una cadena o un valor anulable.

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