Analisar JSON em Java
-
Use a biblioteca
json.simple
para analisar JSON em Java -
Use a biblioteca
org.json
para analisar JSON em Java -
Use a biblioteca
gson
para analisar JSON em Java -
Use a biblioteca
JsonPath
para 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