JSON con Java

Este capítulo cubre cómo codificar y decodificar objetos JSON usando el lenguaje de programación Java. Comencemos por preparar el entorno para comenzar nuestra programación con Java para JSON.

Medio ambiente

Antes de comenzar a codificar y decodificar JSON con Java, debe instalar cualquiera de los módulos JSON disponibles. Para este tutorial, hemos descargado e instalado JSON.simple y hemos agregado la ubicación dejson-simple-1.1.1.jar archivo a la variable de entorno CLASSPATH.

Mapeo entre entidades JSON y Java

JSON.simple mapea entidades del lado izquierdo al lado derecho mientras decodifica o analiza, y mapea entidades de derecha a izquierda mientras codifica.

JSON Java
cuerda java.lang.String
número java.lang.Number
verdadero | falso java.lang.Boolean
nulo nulo
formación java.util.List
objeto java.util.Map

Al decodificar, la clase concreta predeterminada de java.util.List es org.json.simple.JSONArray y la clase concreta predeterminada de java.util.Map es org.json.simple.JSONObject .

Codificación de JSON en Java

A continuación se muestra un ejemplo simple para codificar un objeto JSON utilizando Java JSONObject, que es una subclase de java.util.HashMap. No se proporciona ningún pedido. Si necesita el orden estricto de los elementos, use el método JSONValue.toJSONString (map) con una implementación de mapa ordenada como java.util.LinkedHashMap.

import org.json.simple.JSONObject;

class JsonEncodeDemo {

   public static void main(String[] args) {
      JSONObject obj = new JSONObject();

      obj.put("name", "foo");
      obj.put("num", new Integer(100));
      obj.put("balance", new Double(1000.21));
      obj.put("is_vip", new Boolean(true));

      System.out.print(obj);
   }
}

Al compilar y ejecutar el programa anterior, se generará el siguiente resultado:

{"balance": 1000.21, "num":100, "is_vip":true, "name":"foo"}

A continuación se muestra otro ejemplo que muestra una transmisión de objetos JSON utilizando Java JSONObject:

import org.json.simple.JSONObject;

class JsonEncodeDemo {

   public static void main(String[] args) {
	
      JSONObject obj = new JSONObject();

      obj.put("name","foo");
      obj.put("num",new Integer(100));
      obj.put("balance",new Double(1000.21));
      obj.put("is_vip",new Boolean(true));

      StringWriter out = new StringWriter();
      obj.writeJSONString(out);
      
      String jsonText = out.toString();
      System.out.print(jsonText);
   }
}

Al compilar y ejecutar el programa anterior, se genera el siguiente resultado:

{"balance": 1000.21, "num":100, "is_vip":true, "name":"foo"}

Decodificando JSON en Java

El siguiente ejemplo hace uso de JSONObject y JSONArray donde JSONObject es un java.util.Map y JSONArray es un java.util.List, por lo que puede acceder a ellos con operaciones estándar de Map o List.

import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.parser.ParseException;
import org.json.simple.parser.JSONParser;

class JsonDecodeDemo {

   public static void main(String[] args) {
	
      JSONParser parser = new JSONParser();
      String s = "[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]";
		
      try{
         Object obj = parser.parse(s);
         JSONArray array = (JSONArray)obj;
			
         System.out.println("The 2nd element of array");
         System.out.println(array.get(1));
         System.out.println();

         JSONObject obj2 = (JSONObject)array.get(1);
         System.out.println("Field \"1\"");
         System.out.println(obj2.get("1"));    

         s = "{}";
         obj = parser.parse(s);
         System.out.println(obj);

         s = "[5,]";
         obj = parser.parse(s);
         System.out.println(obj);

         s = "[5,,2]";
         obj = parser.parse(s);
         System.out.println(obj);
      }catch(ParseException pe) {
		
         System.out.println("position: " + pe.getPosition());
         System.out.println(pe);
      }
   }
}

Al compilar y ejecutar el programa anterior, se generará el siguiente resultado:

The 2nd element of array
{"1":{"2":{"3":{"4":[5,{"6":7}]}}}}

Field "1"
{"2":{"3":{"4":[5,{"6":7}]}}}
{}
[5]
[5,2]