Analizar JSON en Java

Siddharth Swami 12 octubre 2023
  1. Utilice la biblioteca json.simple para analizar JSON en Java
  2. Utilice la biblioteca org.json para analizar JSON en Java
  3. Utilice la biblioteca gson para analizar JSON en Java
  4. Utilice la biblioteca JsonPath para analizar JSON en Java
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

Artículo relacionado - Java JSON