Obtenga un valor por clave en un JSONArray

1. Información general

JSON es un formato de intercambio de datos ligero e independiente del idioma que se utiliza para la mayoría de las comunicaciones cliente-servidor.

JSONObject y JSONArray son las dos clases comunes generalmente disponibles en la mayoría de las bibliotecas de procesamiento JSON. Un JSONObject almacena pares clave-valor desordenados , al igual que una implementación de Java Map . Un JSONArray , por otro lado, es una secuencia ordenada de valores muy parecida a una Lista o un Vector en Java.

En este tutorial, usaremos la biblioteca JSON-Java ( org.json ) y aprenderemos cómo procesar un JSONArray para extraer el valor de una clave determinada. Si es necesario, tenemos disponible una introducción a esta biblioteca.

2. Dependencia de Maven

Primero comenzaremos agregando la siguiente dependencia en nuestro POM:

 org.json json 20180813 

Siempre podemos encontrar la última versión de JSON-Java en Maven Central.

3. Desarrollo del contexto

Un mensaje JSON generalmente se compone de objetos JSON y matrices que pueden estar anidadas entre sí. Un objeto JSONArray se encierra entre corchetes [] mientras que un JSONObject se encierra entre llaves {} . Por ejemplo, consideremos este mensaje JSON:

[ { "name": "John", "city": "chicago", "age": "22" }, { "name": "Gary", "city": "florida", "age": "35" }, { "name": "Selena", "city": "vegas", "age": "18" } ]

Claramente, es una matriz de objetos JSON. Cada objeto JSON de esta matriz representa nuestro registro de cliente con un nombre, una edad y una ciudad como atributos o claves.

4. Procesando JSONArray

Dado el JSON anterior, ¿qué pasa si deseamos conocer los nombres de todos nuestros clientes? En otras palabras, dada una clave, "nombre" en nuestro ejemplo, ¿cómo podemos buscar todos los valores asignados a esa clave en una matriz JSON determinada?

Como sabemos, un JSONArray es una lista de objetos JSON. Entonces, busquemos todos los valores para una clave determinada:

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()); }

En el ejemplo anterior:

  • En primer lugar, iteramos a través de la lista completa de objetos en una matriz JSON
  • Luego, para cada JSONObject , obtenemos el valor asignado a la clave dada

Además, el método optString () devuelve una cadena vacía si no existe tal clave.

Al invocar getValuesForGivenKey (jsonArrayStr, "nombre") donde jsonArrayStr es nuestro JSON de ejemplo, obtendremos una lista de todos los nombres como resultado:

[John, Gary, Selena]

5. Conclusión

En este artículo rápido, aprendimos cómo analizar un JSONArray para obtener todos los valores mapeados para una clave determinada. Aquí, hemos utilizado la biblioteca JSON-Java (org.json) .

JSON.simple es otra alternativa similar y poderosa para trabajar con JSON en Java. Por favor, siéntase libre para explorar.

Como de costumbre, el código fuente completo está disponible en Github.