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.