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.
Tenemos como público, oportunidad para hacer sugerencias en posibles temas a abordar?
Por otra parte, una guía muy necesaria.
Sí claro, estoy abierto a escuchar sugerencias de temas de Oracle que necesiten conocer más, y poco a poco irlos abordando.
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?
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.
Gracias¡ No encontré la respuesta pero si la orientación «todo proyecto es distinto». Mil gracias