Analisar JSON em Java

Siddharth Swami 12 outubro 2023
  1. Use a biblioteca json.simple para analisar JSON em Java
  2. Use a biblioteca org.json para analisar JSON em Java
  3. Use a biblioteca gson para analisar JSON em Java
  4. Use a biblioteca JsonPath para analisar JSON em Java
Analisar JSON em Java

JSON é uma linguagem leve e baseada em texto para armazenar e transferir dados. É baseado em objetos em JavaScript. JSON representa dois tipos estruturados que são objetos e matrizes.

Este tutorial demonstra como analisar JSON em Java usando vários métodos.

Para nossos exemplos, trabalharemos com o seguinte arquivo JSON.

{
    "firstName": "Ram",
    "lastName": "Sharma",
    "age": 26
    },

    "phoneNumbers": [
        {
            "type": "home",
            "phone-number": "212 888-2365"
        }
    ] 
}

Use a biblioteca json.simple para analisar JSON em Java

O primeiro método é usando a biblioteca json.simple para analisar JSON em Java. Temos que importar duas classes da biblioteca java.simple, org.json.simple.JSONArray e org.json.simple.JSONObject.

O JSONArray nos ajuda a analisar os elementos na forma de um array, e o JSONObject nos permite analisar os objetos presentes no texto JSON.

O exemplo a seguir demonstra o uso desse 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);
  }
}

Produção:

First name is: Ram
Ladt name is: Sharma

No exemplo acima, lemos um arquivo JSON que já existe no sistema e a partir dele, estamos imprimindo os atributos de nome e sobrenome desse arquivo.

Aqui, a função JSONParser().parse() presente em org.json.simple.parser.* Analisa o texto JSON do arquivo. O método js.get() obtém o valor de firstName e lastName do arquivo.

Use a biblioteca org.json para analisar JSON em Java

Esta biblioteca fornece um método estático para ler uma string JSON diretamente em vez de ler o arquivo. Os métodos getJSONObject e getJSONArray tornam o trabalho mais simples e fornecem a entrada necessária a partir da string inserida pelo usuário. Além disso, não precisamos fazer o typecast do objeto para JSONObject como feito no exemplo anterior.

Veja o código abaixo.

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);
    }
  }
}

Produção:

FirstName Ram
LastName Sharma
212 888-2365

Use a biblioteca gson para analisar JSON em Java

Esta biblioteca também deve ser baixada adicionalmente. Temos que importar três classes da biblioteca gson que são com.google.gson.JsonArray, com.google.gson.JsonObject e com.google.gson.JsonParser.

Podemos usar strings estáticas e também um arquivo para analisar JSON. Os nomes dos métodos para obter a entrada são ligeiramente diferentes do anterior. Para obter os dados do objeto, usaremos getAsJsonObject() e, para entradas de array, usaremos getAsJsonArray().

Veja o código abaixo.

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);
    }
  }
}

Produção:

FirstName Ram
LastName Sharma
212 888-2365

Use a biblioteca JsonPath para analisar JSON em Java

Nesta biblioteca, usaremos o método read() para obter as entradas de dados. Não precisamos fazer um objeto aqui para chamar o texto JSON. Estaremos importando a classe com.jayway.jsonpath.JsonPath para isso.

O exemplo a seguir demonstra esse 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);
    }
  }
}

Produção:

FirstName Ram
LastName Sharma
212 888-2365

Artigo relacionado - Java JSON