Java 8 : API procesamiento JSON-P en streaming
- Details
- Created: Thursday, 27 October 2016 18:49
- Hits: 2319
JSON-P Streaming
1. Configuración MAVEN.
<modelVersion>4.0.0</modelVersion>
<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>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<!-- o cualquier versión que ocupes, en mi caso java 8 -->
<source>1.8</source><target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
2. Archivo JSON (Generado aleatoriamente con json-generator y guardado en un archivo propio).
Este archivo se encuentra en el directorio resources dentro del proyecto.
3. Java (JSON-P Streaming).
package com.ledzedev.ejemplosjson;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.json.Json;
import javax.json.stream.JsonParser;
import java.io.IOException;
import java.io.InputStream;
/**
* Código generado por Gerado Pucheta Figueroa
* Twitter: @ledzedev
* 27/Oct/2016.
*/
public class ProcesaPaisesJsonStream {private static final Logger log = LoggerFactory.getLogger(ProcesaPaisesJsonStream.class);
public static void main(String[] args) {
String paisABuscar = "Alaska";
String emailDelPais = ProcesaPaisesJsonStream.obtenerEmailConPais(paisABuscar);
log.info("El e-mail de la dirección ubicada en " + paisABuscar + ", es: " + emailDelPais);
}
public static String obtenerEmailConPais(String pais) {
JsonParser jsonParser = null;
String email = null;
//paso 1. Obtener el JSON, en este caso viene de un archivo, pero puede venir de un servicio en web.
/* Ejemplo si viene por web
URL url = new URL("http://restcountries.eu/rest/v1/all");
InputStream inputStream = url.openStream();
*/
try (InputStream inputStream = EjemploPaisesJson.class.getClassLoader().getResourceAsStream("json-generator-file.json")) {jsonParser = Json.createParser(inputStream);
//paso 2. recorrer el JSON hasta que se procese|encuentre lo que se necesite.
boolean paisEncontrado = false;while (jsonParser.hasNext() && !paisEncontrado) {
JsonParser.Event event = jsonParser.next();
if (event.equals(JsonParser.Event.KEY_NAME)) {
switch (jsonParser.getString()) {
//Nota: debido a que el api solo recorre hacia adelante y en el archivo el campo email está antes que el campo address,
// tenemos que guardar el valor de email, previo a que se valide el contenido de address.
case "email"://guardamos el valor de email
jsonParser.next();email = jsonParser.getString();
break;
case "address":
jsonParser.next();
String direccion = jsonParser.getString();
//si el pais que buscamos se encuentra en address entonces mandamos la variable paisEncontrado a true
paisEncontrado = (direccion != null && direccion.contains(pais));break;
}
}
}
} catch (IOException e) {
log.error("error al leer el archivo json", e);
return null;
}
return email;
}
}
Java 8 : API para procesamiento JSON-P
4. Descárgate el código en github o en zip y haz pruebas.
Artículo relacionado.
-