Como consumir datos JSON en Java (Parte 2)


Continuación

En la entrada anterior vimos como obtener datos JSON con Java y luego los imprimimos en pantalla en "bruto", es decir los imprimimos como mismo los obtuvimos. Para dar un ejemplo esta bien, pero no es muy útil al momento de hacer una aplicación del mundo real. Para poder realmente consumir los datos debemos tener una manera fácil de acceder por separado a cada uno de los valores en los registros. A continuación veremos como hacer esto.

Existe más de una manera de trabajar con JSON en Java, en esta ocasión lo haremos utilizando el paquete javax.json.

Lo primero que haremos será obtener el paquete y configurarlo en nuestro proyecto. Es muy recomendable utilizar Maven, sobre todo si están trabajando en un proyecto complejo, pero para no desviarnos demasiado del propósito de este tutorial vamos a descargarlo directamente desde aquí:

http://www.java2s.com/Code/Jar/j/Downloadjavaxjson10jar.htm

En mi caso estoy utilizando NetBeans, la configuración debe ser similar para otro IDE que utilicen. Estos son los pasos:

1. Localizamos nuestro proyecto, en el nombre damos click derecho y accedemos a Properties:




2. Entramos en la sección Libraries, damos click en Add Jar/Folder:


3. Localizamos la ruta donde descomprimimos el archivo descargado, los seleccionamos y damos clic en Abrir:


4. Aparecerá seleccionada en lista de librerías, damos click en en Ok:



Modificaciones al código

 Ahora solo nos queda poner manos a la obra en el código. Básicamente se modificaron dos partes.

Importamos lo siguiente:


Añadimos la lógica para manejar los datos en formato JSON:


A continuación se muestra el código completo.

Código


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package jsonexample;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.StringReader;
import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonObject;
import javax.json.JsonReader;
 


public class JsonExamplePart2 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
           
        //Escribimos el código dentro de un bloque try - catch, si ocurrre
        //un error, lo capturamos y mostramos el mensaje correspondiente
        try {
            
            //establecemos la url que itilizaremos para obtener los datos
            URL miUrl = new URL("https://jsonplaceholder.typicode.com/comments");
            
            //abrimos una conexion HTTP
            HttpURLConnection conexion = (HttpURLConnection) miUrl.openConnection();
            
            //le indicamos el método de solicitud que utilizaremos, 
            //en este caso GET
            conexion.setRequestMethod("GET");
            
            //indicamos que recibiremos datos en formato JSON
            conexion.setRequestProperty("Accept", "application/json");
            
            //leeemos la respuesta de la petición y la colocamos en un buffer
            InputStreamReader isr = new InputStreamReader(conexion.getInputStream());
            BufferedReader br = new BufferedReader(isr);
            
            //construimos la cadena con el contenido de los comentarios
            StringBuilder contenido = new StringBuilder();
            String linea;
            
            while ((linea = br.readLine()) != null) {
                
                contenido.append(linea);
                
            }
            
            
           //obetenemos un JsonArray a partir de la cadena anterior
           JsonReader jsonReader = Json.createReader(new StringReader(contenido.toString()));
           
           JsonArray comentariosArray = jsonReader.readArray();
           
           jsonReader.close();
           
           //con el array construido ahora ya solo nos queda utilizar los
           //valores a nuestro antojo. En este caso quiero imprimir solo
           //el nombre del comentario y el email
           
            for (int i = 0; i < comentariosArray.size(); i++) {
                
                JsonObject comentario = comentariosArray.getJsonObject(i);
                
                System.out.println("Nombre: " + comentario.getString("name") + 
                                   " | Email: " + comentario.getString("email")
                );
                      
            }
                   
                    
            //por último liberamos la conexión
            conexion.disconnect();
         
          //en caso de que ocurra un excepción mostramos el mensaje de error  
        } catch (Exception ex) {
            System.out.println("Excepción: " + ex.getMessage());
        }
               
        
    }
    
}

Salida de ejemplo

Al ejecutar el código deben obtener una salida similar a esta:


Refererencias

Comentarios