En este laboratorio aprenderemos como extraer los valores de las propiedades o los campos en un objeto Json de tipo String o bien, de tipo JsonObject.

Para este proceso únicamente necesitaremos tener la librería JSON la podemos obtener colocando la siguiente dependencia en nuestro archivo pom.xml:

<dependency>
  <groupId>org.json</groupId>
  <artifactId>json</artifactId>
  <version>20180130</version>
  <type>jar</type>
</dependency>

Luego en la clase donde crearemos nuestro método que leerá el json, debemos importar las siguientes referencias:

import org.json.JSONArray;
import org.json.JSONObject;

Tenemos un objeto json con el siguiente formato:

{
"Account":{
           "Holder":"Gari Kaspárov",
           "CurrencyCode":"CRC",
           "ProductName":"Cuenta",
           "State":"1"
},
"IsSuccessful":true,
"Errors":[{
           "Account":"123456789",
           "Code":"asde23"
}],
"OperationId":"31e32f8f-6da5-4d3c-8434-203d8f53ed89"
}

Para extraer el valor de algún campo, únicamente usaremos el siguiente código, lo explico a detalle en los comentarios:

//Declaramos nuestra variable de tipo String con un formato de Json
String responseJson = "{
"Account":{
           "Holder":"Gari Kaspárov",
           "CurrencyCode":"CRC",
           "ProductName":"Cuenta",
           "State":"1"
},
"IsSuccessful":true,
"Errors":[{
           "Account":123456789,
           "Code":"asde23"
}],
"OperationId":"31e32f8f-6da5-4d3c-8434-203d8f53ed89"
}";

//Convertimos el string en un objeto json
      JSONObject json = new JSONObject(responseJson);

//Obtenemos la propiedad dentro de una rama del json
      String holder = json.getJSONObject("Account").getString("Holder");

//Obtenemos la propiedad de tipo boolean fuera de una rama en un json
      boolean isSuccessful = json.getBoolean("IsSuccessful");

//Obtenemos la propiedad de tipo string fuera de una rama en un json
      String operationId = json.getString("OperationId");

//Para el caso de Errors, los [] representan que hay un arreglo en el json, para extraer los datos debemos acceder al arreglo
	  Integer account = json.getJSONArray("Errors").getJSONObject(0).getInt("Account");
	  String code = json.getJSONArray("Errors").getJSONObject(0).getString("Code");

//Imprimimos las respuestas
      System.out.println(holder);
      System.out.println(isSuccessful);
      System.out.println(operationId);

Nota: Para el arreglo Errors, si tenemos muchos objetos en el arreglo, deberemos recorrerlo por medio de un ciclo for y añadir el contador en getJSONObject(i)

De esta manera obtendremos la siguiente respuesta:

Como vemos en el ejemplo, lo importante es conoces el lugar donde se encuentre el campo que necesitamos extraer del json, ya sea dentro de una rama del json o fuera de ella.

Además, es importando definir en el llamado de la función, el tipo de dato que traeremos del objeto json, en el ejemplo usamos json.getString y json.getBoolean pero podemos utilizar otros métodos como getDouble, getFloat, getLong, getInt, entre otros, esto nos ayudará a tipar automáticamente el tipo de dato que recibamos en el json y así procesarlo mejor.

5 respuestas a «Cómo obtener los valores de las propiedades de un json en Java»

  1. Una pregunta, como leeria un array de String en mi objeto Json, por ejemplo:
    {
    «_id»: 4,
    «Nombre»: {«pila»:» FRANCISCO JAVIER»,
    «AP»:»CARTUJANO»,
    «AM»:»ESCOBAR»},
    «RFC»: «GORM680121MTSNDG06»,
    «Sueldo»: 32000,
    «Sexo»:»MASCULINO»,
    «Materias»: [«BASES DE DATOS NOSQL»,»FUND. DE BASE DE DATOS»],
    «Telefonos»:{ «casa»:»4919203601″,
    «celular»:»6103926139″ }
    }
    Como obtendria las materias?

    1. Al arreglo de materias le debes mejorar la estructura de como se leen, lo correcto sería una estructura como esta:

      «Materias»:[
      {«nombre»:»BASES DE DATOS NOSQL»},
      {«nombre»:»FUND. DE BASE DE DATOS»},
      {«nombre»:»BASE DE DATOS 1″},
      {«nombre»:»BASE DE DATOS 2″}
      ]

      De manera que al recorrerlo se llame la propiedad nombre en cada posición del arreglo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *