Cómo analizar JSON en Java

JSON (Notación de objetos de JavaScript) es un formato de intercambio de datos independiente del idioma, basado en texto y liviano que es fácil de leer y escribir para humanos y máquinas. JSON puede representar dos tipos estructurados: objetos y arrays. Un objeto es una colección desordenada de cero o más pares de nombre/valor. Una array es una secuencia ordenada de cero o más valores. Los valores pueden ser strings, números, booleanos, nulos y estos dos tipos estructurados.

A continuación se muestra un ejemplo simple de Wikipedia que muestra la representación JSON de un objeto que describe a una persona. El objeto tiene valores de string para el nombre y el apellido, un valor numérico para la edad, un valor de objeto que representa la dirección de la persona y un valor de array de objetos de número de teléfono.

{
    "firstName": "John",
    "lastName": "Smith",
    "age": 25,
    "address": {
        "streetAddress": "21 2nd Street",
        "city": "New York",
        "state": "NY",
        "postalCode": 10021
    },
    "phoneNumbers": [
        {
            "type": "home",
            "number": "212 555-1234"
        },
        {
            "type": "fax",
            "number": "646 555-4567" 
        }
    ] 
}

Procesamiento de JSON en Java: la API de Java para el procesamiento de JSON JSON.simple es una biblioteca de Java simple que permite analizar, generar, transformar y consultar JSON.

Primeros pasos: debe descargar el jar json-simple-1.1 y ponerlo en su CLASSPATH antes de compilar y ejecutar los códigos de ejemplo a continuación.

API Json-Simple: proporciona modelos de objetos para estructuras de array y objetos JSON. Estas estructuras JSON se representan como modelos de objetos utilizando los tipos JSONObject y JSONArray . JSONObject proporciona una vista de mapa para acceder a la colección desordenada de cero o más pares de nombre/valor del modelo. De manera similar, JSONArray proporciona una vista de lista para acceder a la secuencia ordenada de cero o más valores del modelo.

Escribir JSON en un archivo

Veamos un ejemplo que escribe los datos JSON anteriores en un archivo «JSONExample.json», con la ayuda de JSONObject y JSONArray.

// Java program for write JSON to a file
  
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.LinkedHashMap;
import java.util.Map;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
  
public class JSONWriteExample
{
    public static void main(String[] args) throws FileNotFoundException 
    {
        // creating JSONObject
        JSONObject jo = new JSONObject();
          
        // putting data to JSONObject
        jo.put("firstName", "John");
        jo.put("lastName", "Smith");
        jo.put("age", 25);
          
        // for address data, first create LinkedHashMap
        Map m = new LinkedHashMap(4);
        m.put("streetAddress", "21 2nd Street");
        m.put("city", "New York");
        m.put("state", "NY");
        m.put("postalCode", 10021);
          
        // putting address to JSONObject
        jo.put("address", m);
          
        // for phone numbers, first create JSONArray 
        JSONArray ja = new JSONArray();
          
        m = new LinkedHashMap(2);
        m.put("type", "home");
        m.put("number", "212 555-1234");
          
        // adding map to list
        ja.add(m);
          
        m = new LinkedHashMap(2);
        m.put("type", "fax");
        m.put("number", "212 555-1234");
          
        // adding map to list
        ja.add(m);
          
        // putting phoneNumbers to JSONObject
        jo.put("phoneNumbers", ja);
          
        // writing JSON to file:"JSONExample.json" in cwd
        PrintWriter pw = new PrintWriter("JSONExample.json");
        pw.write(jo.toJSONString());
          
        pw.flush();
        pw.close();
    }
}

Salida del archivo «JSONExample.json»:

{
     "lastName":"Smith",
    "address":{
        "streetAddress":"21 2nd Street",
         "city":"New York",
         "state":"NY",
         "postalCode":10021
    },
     "age":25,
     "phoneNumbers":[
            {
            "type":"home", "number":"212 555-1234"
            },
         {
            "type":"fax", "number":"212 555-1234"
         }
     ],
     "firstName":"John"
}

Nota: en JSON, un objeto es un conjunto desordenado de pares de nombre/valor, por lo que JSONObject no conserva el orden de los pares de nombre/valor de un objeto, ya que (por definición) no es significativo. Por lo tanto, en nuestro archivo de salida, el orden no se conserva.

Leer JSON desde un archivo

Veamos un ejemplo que lee los datos JSON del archivo creado anteriormente «JSONExample.json» con la ayuda de JSONParser, JSONObject y JSONArray.

// Java program to read JSON from a file
  
import java.io.FileReader;
import java.util.Iterator;
import java.util.Map;
  
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.*;
  
public class JSONReadExample 
{
    public static void main(String[] args) throws Exception 
    {
        // parsing file "JSONExample.json"
        Object obj = new JSONParser().parse(new FileReader("JSONExample.json"));
          
        // typecasting obj to JSONObject
        JSONObject jo = (JSONObject) obj;
          
        // getting firstName and lastName
        String firstName = (String) jo.get("firstName");
        String lastName = (String) jo.get("lastName");
          
        System.out.println(firstName);
        System.out.println(lastName);
          
        // getting age
        long age = (long) jo.get("age");
        System.out.println(age);
          
        // getting address
        Map address = ((Map)jo.get("address"));
          
        // iterating address Map
        Iterator<Map.Entry> itr1 = address.entrySet().iterator();
        while (itr1.hasNext()) {
            Map.Entry pair = itr1.next();
            System.out.println(pair.getKey() + " : " + pair.getValue());
        }
          
        // getting phoneNumbers
        JSONArray ja = (JSONArray) jo.get("phoneNumbers");
          
        // iterating phoneNumbers
        Iterator itr2 = ja.iterator();
          
        while (itr2.hasNext()) 
        {
            itr1 = ((Map) itr2.next()).entrySet().iterator();
            while (itr1.hasNext()) {
                Map.Entry pair = itr1.next();
                System.out.println(pair.getKey() + " : " + pair.getValue());
            }
        }
    }
}

Producción:

John
Smith
25
streetAddress : 21 2nd Street
postalCode : 10021
state : NY
city : New York
number : 212 555-1234
type : home
number : 212 555-1234
type : fax

Este artículo es una contribución de Gaurav Miglani . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *