Analizar JSON en Java
-
Utilice la biblioteca
json.simple
para analizar JSON en Java -
Utilice la biblioteca
org.json
para analizar JSON en Java -
Utilice la biblioteca
gson
para analizar JSON en Java -
Utilice la biblioteca
JsonPath
para analizar JSON en Java
JSON es un lenguaje ligero y basado en texto para almacenar y transferir datos. Está basado en objetos en JavaScript. JSON representa dos tipos estructurados que son objetos y matrices.
Este tutorial demuestra cómo analizar JSON en Java utilizando varios métodos.
Para nuestros ejemplos, trabajaremos con el siguiente archivo JSON.
{
"firstName": "Ram",
"lastName": "Sharma",
"age": 26
},
"phoneNumbers": [
{
"type": "home",
"phone-number": "212 888-2365"
}
]
}
Utilice la biblioteca json.simple
para analizar JSON en Java
El primer método consiste en utilizar la biblioteca json.simple
para analizar JSON en Java. Tenemos que importar dos clases de la biblioteca java.simple
, org.json.simple.JSONArray
y org.json.simple.JSONObject
.
El JSONArray
nos ayuda a analizar elementos en forma de array, y el JSONObject
nos permite analizar los objetos presentes en el texto JSON.
El siguiente ejemplo demuestra el uso de este método.
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.*;
public class JSONsimple {
public static void main(String[] args) throws Exception {
// parsing file "JSONExample.json"
Object ob = new JSONParser().parse(new FileReader("JSONFile.json"));
// typecasting ob to JSONObject
JSONObject js = (JSONObject) ob;
String firstName = (String) js.get("firstName");
String lastName = (String) js.get("lastName");
System.out.println("First name is: " + firstName);
System.out.println("Last name is: " + lastName);
}
}
Producción :
First name is: Ram
Ladt name is: Sharma
En el ejemplo anterior, hemos leído un archivo JSON que ya está en el sistema y, a partir de ahí, estamos imprimiendo los atributos de nombre y apellido de ese archivo.
Aquí, la función JSONParser().parse()
presente en org.json.simple.parser.*
Analiza el texto JSON del archivo. El método js.get()
aquí obtiene el valor de firstName
y lastName
del archivo.
Utilice la biblioteca org.json
para analizar JSON en Java
Esta biblioteca proporciona un método estático para leer una cadena JSON directamente en lugar de leer desde el archivo. Los métodos getJSONObject
y getJSONArray
simplifican el trabajo y nos brindan la entrada requerida de la cadena ingresada por el usuario. Además, no tenemos que convertir el objeto en JSONObject
como se hizo en el ejemplo anterior.
Vea el código a continuación.
import org.json.JSONArray;
import org.json.JSONObject;
public class JSON2 {
static String json = "{\"contacDetails\": {\n" + // JSON text is written here
" \"firstName\": \"Ram\",\n"
+ " \"lastName\": \"Sharma\"\n"
+ " },\n"
+ " \"phoneNumbers\": [\n"
+ " {\n"
+ " \"type\": \"home\",\n"
+ " \"phone-number\": \"212 888-2365\",\n"
+ " }\n"
+ " ]"
+ "}";
public static void main(String[] args) {
// Make a object
JSONObject ob = new JSONObject(json);
// getting first and last name
String firstName = ob.getJSONObject("contacDetails").getString("firstName");
String lastName = ob.getJSONObject("contacDetails").getString("lastName");
System.out.println("FirstName " + firstName);
System.out.println("LastName " + lastName);
// loop for printing the array as phoneNumber is stored as array.
JSONArray arr = obj.getJSONArray("phoneNumbers");
for (int i = 0; i < arr.length(); i++) {
String post_id = arr.getJSONObject(i).getString("phone-number");
System.out.println(post_id);
}
}
}
Producción :
FirstName Ram
LastName Sharma
212 888-2365
Utilice la biblioteca gson
para analizar JSON en Java
Esta biblioteca también debe descargarse adicionalmente. Tenemos que importar tres clases de la biblioteca gson
que son com.google.gson.JsonArray
, com.google.gson.JsonObject
y com.google.gson.JsonParser
.
Podemos usar tanto cadenas estáticas como un archivo para analizar JSON. Los nombres de los métodos para obtener la entrada son ligeramente diferentes al anterior. Para obtener los datos del objeto usaremos getAsJsonObject()
y para las entradas del array, usaremos getAsJsonArray()
.
Vea el código a continuación.
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class GsonMethod {
static String json = "{\"contacDetails\": {\n" + // JSON text is written here
" \"firstName\": \"Ram\",\n"
+ " \"lastName\": \"Sharma\"\n"
+ " },\n"
+ " \"phoneNumbers\": [\n"
+ " {\n"
+ " \"type\": \"home\",\n"
+ " \"phone-number\": \"212 888-2365\",\n"
+ " }\n"
+ " ]"
+ "}";
public static void main(String[] args) {
// Make an object
JsonObject ob = new JsonParser().parse(json).getAsJsonObject();
// getting first and last name
String firstName = ob.getAsJsonObject("contacDetails").get("firstName");
String lastName = ob.getAsJsonObject("contacDetails").get("lastName");
System.out.println("FirstName " + firstName);
System.out.println("LastName " + lastName);
// loop for printing the array as phoneNumber is stored as array.
JsonArray arr = obj.getAsJsonArray("phoneNumbers");
for (int i = 0; i < arr.length(); i++) {
String PhoneNumber = arr.getAsJsonObject(i).get("phone-number");
System.out.println(PhoneNumber);
}
}
}
Producción :
FirstName Ram
LastName Sharma
212 888-2365
Utilice la biblioteca JsonPath
para analizar JSON en Java
En esta biblioteca, usaremos el método read()
para obtener las entradas de datos. No necesitamos crear un objeto aquí para llamar al texto JSON. Importaremos la clase com.jayway.jsonpath.JsonPath
para esto.
El siguiente ejemplo demuestra este método.
import com.jayway.jsonpath.JsonPath;
public class PathMethod {
static String json = "{\"contacDetails\": {\n" + // JSON text is written here
" \"firstName\": \"Ram\",\n"
+ " \"lastName\": \"Sharma\"\n"
+ " },\n"
+ " \"phoneNumbers\": [\n"
+ " {\n"
+ " \"type\": \"home\",\n"
+ " \"phone-number\": \"212 888-2365\",\n"
+ " }\n"
+ " ]"
+ "}";
public static void main(String[] args) {
// getting input
String firstName = JsonPath.read(json, "$.contactDetails.firstName");
System.out.println("FirstName " + firstName);
String lastName = JsonPath.read(json, "$.contactDetails.lastName");
System.out.println("LastName " + lastName);
Integer phoneNumbers = JsonPath.read(json, "$.phoneNumbers.length()");
for (int i = 0; i < phoneNumbers; i++) {
String number = JsonPath.read(json, "$.phoneNumber[" + i + "].phone-number");
System.out.println(number);
}
}
}
Producción :
FirstName Ram
LastName Sharma
212 888-2365