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