Estou criando um aplicativo Android que precisa baixar e sincronizar com um banco de dados online. Estou enviando minha consulta do aplicativo para uma página php que retorna as linhas relevantes de um banco de dados no formato JSON.
alguém pode me dizer a melhor maneira de iterar através de uma matriz JSON?
Eu recebo uma matriz de objetos:
[{json object},{json object},{json object}]
Qual é o trecho de código mais simples que eu poderia usar para acessar os JSONObjects na matriz?
EDIT: agora que penso nisso, o método usado para iterar o loop foi:
for (String row: json){
id = row.getInt("id");
name = row.getString("name");
password = row.getString("password");
}
Então, acho que consegui transformar o Json retornado em um array iterável. Alguma idéia de como eu poderia conseguir isso?
Peço desculpas pela minha imprecisão, mas tive esse trabalho a partir de um exemplo que encontrei na web e, desde então, não consegui encontrá-lo.
Respostas:
Eu fiz isso de duas maneiras diferentes,
1.) faça um mapa
2.) faça um JSONArray de nomes
fonte
Eu acho que esse código é curto e claro:
É isso que você estava procurando?
fonte
Infelizmente,
JSONArray
não suportaforeach
declarações, como:fonte
Quando tentei a sugestão do @ vipw, me deparei com esta exceção:
The method getJSONObject(int) is undefined for the type JSONArray
Isso funcionou para mim:
fonte
Se você estiver usando a implementação Java JSON.org , que é de código aberto, basta fazer o JSONArray implementar a
Iterable
interface e adicionar o seguinte método à classe:Isso tornará todas as instâncias do JSONArray iteráveis, o que significa que a
for (Object foo : bar)
sintaxe agora funcionará com ele (observe que foo precisa ser um objeto, porque JSONArrays não tem um tipo declarado). Tudo isso funciona porque a classe JSONArray é apoiada por um ArrayList simples, que já é iterável. Eu imagino que outras implementações de código aberto sejam tão fáceis de mudar.fonte
Em matrizes, procure:
fonte
Você está usando o mesmo objeto Cast para todas as entradas. Em cada iteração, você acabou de alterar o mesmo objeto, criando um novo.
Este código deve corrigi-lo:
fonte
Enquanto itera sobre uma matriz JSON (org.json.JSONArray, embutida no Android), cuidado com objetos nulos ; por exemplo, você pode obter em
"null"
vez de um nulo sequência .Uma verificação pode parecer com:
fonte