Obter um valor por chave em um JSONArray
1. Visão geral
JSON é um formato de troca de dados leve e independente de idioma usado para a maioria das comunicações cliente-servidor.
JSONObjecteJSONArray são as duas classes comuns normalmente disponíveis na maioria das bibliotecas de processamento JSON. A JSONObject stores unordered key-value pairs, muito parecido com uma implementação JavaMap. A JSONArray, on the other hand, is an ordered sequence of values muito parecido com aList ou aVector em Java.
Neste tutorial, usaremos a bibliotecaJSON-Java (org.json) e aprenderemos como processarJSONArray para extrair o valor de uma determinada chave. Se necessário, temosan introduction disponível para esta biblioteca.
2. Dependência do Maven
Começaremos adicionando a dependência abaixo em nosso POM:
org.json
json
20180813
Sempre podemos descobrir a versão mais recente deJSON-Java emMaven Central.
3. Acúmulo de Contexto
Uma mensagem JSON geralmente é composta de objetos e matrizes JSON que podem ser aninhados um dentro do outro. Um objetoJSONArray está entre colchetes[ ], enquanto aJSONObject está entre colchetes\{}. Por exemplo, vamos considerar esta mensagem JSON:
[
{
"name": "John",
"city": "chicago",
"age": "22"
},
{
"name": "Gary",
"city": "florida",
"age": "35"
},
{
"name": "Selena",
"city": "vegas",
"age": "18"
}
]
Claramente, é uma matriz de objetos JSON. Cada objeto JSON neste array representa nosso registro de cliente tendoa name, age,ecity como seus atributos ou chaves.
4. ProcessandoJSONArray
Dado o JSON acima, e se quisermos descobrir os nomes de todos os nossos clientes? Em outras palavras, dada uma chave“name” em nosso exemplo, como podemos encontrar todos os valores mapeados para aquela chave em um determinado array JSON?
Como sabemos, aJSONArray é uma lista de objetos JSON. Então, vamos encontrar todos os valores para uma determinada chave:
public List getValuesForGivenKey(String jsonArrayStr, String key) {
JSONArray jsonArray = new JSONArray(jsonArrayStr);
return IntStream.range(0, jsonArray.length())
.mapToObj(index -> ((JSONObject)jsonArray.get(index)).optString(key))
.collect(Collectors.toList());
}
No exemplo anterior:
-
Em primeiro lugar, iteramos por toda a lista de objetos em uma matriz JSON
-
Então, para cadaJSONObject, obtemos o valor mapeado para a chave fornecida
Além disso, o métodooptString() retorna uma string vazia se essa chave não existir.
Ao invocargetValuesForGivenKey(jsonArrayStr, “name”), ondejsonArrayStr é nosso JSON de exemplo, obteremos umList de todos os nomes como saída:
[John, Gary, Selena]
5. Conclusão
Neste artigo rápido, aprendemos como analisar aJSONArray para obter todos os valores mapeados para uma determinada chave. Aqui, usamos a bibliotecaJSON-Java (org.json).
JSON.simple é outra alternativa semelhante e poderosa para trabalhar com JSON em Java. Por favor, sinta-se livre para explorar.
Como de costume, o código-fonte completo está disponívelover on Github.