Android JSONObject - como posso fazer um loop em um objeto JSON plano para obter cada chave e valor

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

Como posso obter a chave e o valor de cada item sem saber a chave nem o valor de antemão?

user1763763
fonte

Respostas:

313

Use o keys()iterador para iterar sobre todas as propriedades e chame get()cada uma.

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
fonte
7
Nota: Você não pode usar a forma abreviada para (String s: json.keys ()) {...} É uma pena que nem JSONArray nem JSONObject sejam iteráveis. :-(
tu-Reintegrar Monica-dor duh
o que é json aqui? Json Object, Json Array ou qualquer outra coisa?
Pravinsingh Waghela de
2
@PravinsinghWaghela é um JSONObject conforme especificado na pergunta
Nicolás Carrasco
66

Versão curta da resposta de Franci:

for(Iterator<String> iter = json.keys();iter.hasNext();) {
    String key = iter.next();
    ...
}
Roozbeh Zabihollahi
fonte
o que é json aqui? Json Object, Json Array ou qualquer outra coisa?
Pravinsingh Waghela de
json é JsonObject
Roozbeh Zabihollahi
@PravinsinghWaghela tenho certeza que o OP perguntou como fazer um loop por um objeto json.
Denny
5

Você precisará usar um Iteratorpara percorrer as chaves para obter seus valores.

Aqui está uma implementação do Kotlin, você perceberá que a forma como obtive a string está usando optString(), que está esperando uma String ou um valor anulável.

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

Você deve usar o método keys()ou names(). keys()fornecerá um iterador contendo todos os nomes de propriedade String no objeto, enquanto names()fornecerá um array de todos os nomes de String chave.

Você pode obter a documentação JSONObject aqui

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

Mike Brant
fonte