Java 8 : API para procesamiento JSON-P

 

JSON-P

Sabemos que JSON-P no es la primer API para procesamiento de información en formato JSON, pero si es la primera que ha sido estandarizada a través del Java Community Process (JCP por sus siglas en inglés).

 

1. Configuración Maven.

Agregamos a nuestro pom.xml, las 2 APIs que necesitamos para JSON-P (javax.json como api principal y javax.json de glassfish) y como complemento ocupamos las 2 librerías de slf4j como fachada para tener un logger estándar y evitar el System.out.println()

<groupId>com.ledzedev.ejemplosjson</groupId>
<artifactId>ledzedev</artifactId>
<version>1.0-SNAPSHOT</version>

<name>ledzedev</name>

<dependencies>
<dependency>
<groupId>javax.json</groupId>
<artifactId>javax.json-api</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.0.4</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>

<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>

<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.21</version>
</dependency>
</dependencies>

 

2. Archivo JSON.

[
{
"pais": "Colombia",
"poblacion": 48747632,
"idiomasOficiales": [
{
"idioma": "Español"
},

{
"idioma": "Inglés"
}

]
},
{
"pais": "México",
"poblacion": 120000000,
"idiomasOficiales": [
{
"idioma": "Español"
},

{
"idioma": "Maya"
},

{
"idioma": "Espanglish"
}

]
}
]

3. Java (JSON-P Object Model API).

 

package com.ledzedev.ejemplosjson;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonObject;
import javax.json.JsonReader;
import javax.json.JsonValue;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.List;
import java.util.stream.Collectors;

/**
*
* Código generado por Gerardo Pucheta Figueroa
* Twitter: @ledzedev
* 19/Oct/2016
*
*/
public class EjemploPaisesJson {


private final Logger log = LoggerFactory.getLogger(EjemploPaisesJson.class);

public JsonArray getJsonArrayFromFile(String archivo) throws FileNotFoundException {
InputStream inputStream = EjemploPaisesJson.class.getClassLoader().getResourceAsStream(archivo);

JsonReader jsonReader = Json.createReader(inputStream);
JsonArray jsonArray = jsonReader.readArray();

return jsonArray;
}

public void consultaObjetoJson(String llave){
JsonArray jsonArray = null;
String nombreArchivo = "paises.json";
log.info("Leyendo {} llave: {}",nombreArchivo, llave);
try {
jsonArray = getJsonArrayFromFile(nombreArchivo);
} catch (FileNotFoundException e) {
log.error("ARCHIVO NO ENCONTRADO.",e);
return;
}

List<JsonObject> lst = jsonArray.getValuesAs(JsonObject.class);

lst.forEach(jsonObject -> {
JsonValue jsonValue = jsonObject.get(llave);
switch (jsonValue.getValueType()) {
case STRING:
log.info("capital: " + jsonObject.getString(llave, "Llave desconocida!!!"));
break;
case ARRAY:
JsonArray array = jsonObject.getJsonArray("idiomasOficiales");
String idiomas = array.getValuesAs(JsonObject.class)
.stream()
.map(lang -> lang.getString("idioma", ""))
.collect(Collectors.joining(", "));
log.info("idiomas: " + idiomas);
break;
case NUMBER:
log.info("población: " + jsonObject.getInt("poblacion"));
break;
}
});
}

public static void main(String [] args){

EjemploPaisesJson ejemploPaisesJson = new EjemploPaisesJson();

ejemploPaisesJson.consultaObjetoJson("pais");
ejemploPaisesJson.consultaObjetoJson("poblacion");
ejemploPaisesJson.consultaObjetoJson("idiomasOficiales");

}

}
 
Descargar de github
Descargar en zip