JSON.simple - Guía rápida

JSON.simplees un sencillo kit de herramientas basado en Java para JSON. Puede usar JSON.simple para codificar o decodificar datos JSON.

Caracteristicas

  • Specification Compliant - JSON.simple es totalmente compatible con la especificación JSON - RFC4627.

  • Lightweight - Tiene muy pocas clases y proporciona las funcionalidades necesarias como codificar / decodificar y escapar de json.

  • Reuses Collections - La mayoría de las operaciones se realizan mediante interfaces Mapa / Lista, lo que aumenta la reutilización.

  • Streaming supported - Admite la transmisión de texto de salida JSON.

  • SAX like Content Handler - Proporciona una interfaz similar a SAX para transmitir una gran cantidad de datos JSON.

  • High performance - Se utiliza un analizador basado en montón y proporciona un alto rendimiento.

  • No dependency- Sin dependencia de biblioteca externa. Se puede incluir de forma independiente.

  • JDK1.2 compatible - El código fuente y el binario son compatibles con JDK1.2

Configuración del entorno local

JSON.simple es una biblioteca para Java, por lo que el primer requisito es tener JDK instalado en su máquina.

Requisitos del sistema

JDK Memoria Espacio del disco Sistema operativo
1,5 o superior. Sin requisitos mínimos. Sin requisitos mínimos. Sin requisitos mínimos.

Paso 1: Verifique la instalación de Java en su máquina

En primer lugar, abra la consola y ejecute un comando java basado en el sistema operativo en el que está trabajando.

SO Tarea Mando
Ventanas Abrir consola de comandos c: \> java -version
Linux Terminal de comando abierto $ java -version
Mac Terminal abierta máquina: <joseph $ java -version

Verifiquemos la salida para todos los sistemas operativos:

SO Salida
Ventanas

versión de Java "1.8.0_101"

Entorno de ejecución Java (TM) SE (compilación 1.8.0_101)

Linux

versión de Java "1.8.0_101"

Entorno de ejecución Java (TM) SE (compilación 1.8.0_101)

Mac

versión de Java "1.8.0_101"

Entorno de ejecución Java (TM) SE (compilación 1.8.0_101)

Si no tiene Java instalado en su sistema, descargue Java Software Development Kit (SDK) desde el siguiente enlace www.oracle.com . Estamos asumiendo Java 1.8.0_101 como la versión instalada para este tutorial.

Paso 2: configurar el entorno JAVA

Selecciona el JAVA_HOMEvariable de entorno para apuntar a la ubicación del directorio base donde está instalado Java en su máquina. Por ejemplo.

SO Salida
Ventanas Establezca la variable de entorno JAVA_HOME en C: \ Archivos de programa \ Java \ jdk1.8.0_101
Linux exportar JAVA_HOME = / usr / local / java-current
Mac exportar JAVA_HOME = / Library / Java / Home

Agregue la ubicación del compilador de Java a la ruta del sistema.

SO Salida
Ventanas Añade la cadena C:\Program Files\Java\jdk1.8.0_101\bin al final de la variable del sistema, Path.
Linux export PATH = $ PATH: $ JAVA_HOME / bin /
Mac no requerido

Verifique la instalación de Java usando el comando java -version como se explicó anteriormente.

Paso 3: Descarga JSON.simple Archive

Descargue la última versión del archivo jar JSON.simple desde json-simple @ MVNRepository . En el momento de escribir este tutorial, hemos descargado json-simple-1.1.1.jar y lo hemos copiado en la carpeta C: \> JSON.

SO Nombre de archivo
Ventanas json-simple-1.1.1.jar
Linux json-simple-1.1.1.jar
Mac json-simple-1.1.1.jar

Paso 4: configurar el entorno JSON_JAVA

Selecciona el JSON_JAVAvariable de entorno para apuntar a la ubicación del directorio base donde JSON.simple jar se almacena en su máquina. Supongamos que hemos almacenado json-simple-1.1.1.jar en la carpeta JSON.

No Señor SO y descripción
1

Windows

Establezca la variable de entorno JSON_JAVA en C: \ JSON

2

Linux

exportar JSON_JAVA = / usr / local / JSON

3

Mac

exportar JSON_JAVA = / Library / JSON

Paso 5: Establecer la variable CLASSPATH

Selecciona el CLASSPATH variable de entorno para apuntar a la ubicación del jar JSON.simple.

No Señor SO y descripción
1

Windows

Establezca la variable de entorno CLASSPATH en% CLASSPATH%;% JSON_JAVA% \ json-simple-1.1.1.jar;.;

2

Linux

export CLASSPATH = $ CLASSPATH: $ JSON_JAVA / json-simple-1.1.1.jar :.

3

Mac

export CLASSPATH = $ CLASSPATH: $ JSON_JAVA / json-simple-1.1.1.jar :.

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 .

Los siguientes caracteres son caracteres reservados y no se pueden usar en JSON y se deben escapar correctamente para usarse en cadenas.

  • Backspace para ser reemplazado con \ b

  • Form feed para ser reemplazado con \ f

  • Newline para ser reemplazado por \ n

  • Carriage return para ser reemplazado con \ r

  • Tab para ser reemplazado con \ t

  • Double quote para ser reemplazado por \ "

  • Backslash para ser reemplazado con \\

JSONObject.escape()El método se puede utilizar para escapar de esas palabras clave reservadas en una cadena JSON. A continuación se muestra el ejemplo:

Ejemplo

import org.json.simple.JSONObject;

public class JsonDemo {
   public static void main(String[] args) {
      JSONObject jsonObject = new JSONObject();
      String text = "Text with special character /\"\'\b\f\t\r\n.";
      System.out.println(text);
      System.out.println("After escaping.");
      text = jsonObject.escape(text);
      System.out.println(text);
   }
}

Salida

Text with special character /"'
.
After escaping.
Text with special character \/\"'\b\f\t\r\n.

JSONValue proporciona un método estático parse () para analizar la cadena json dada para devolver un JSONObject que luego se puede usar para analizar los valores. Vea el ejemplo a continuación.

Ejemplo

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;

public class JsonDemo {
   public static void main(String[] args) {
      String s = "[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]";
      Object obj = JSONValue.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 = JSONValue.parse(s);
      System.out.println(obj);

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

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

Salida

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

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

JSONParser.parse () arroja ParseException en caso de JSON no válido. El siguiente ejemplo muestra cómo manejar ParseException.

Ejemplo

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

class JsonDemo {
   public static void main(String[] args) {
      JSONParser parser = new JSONParser();
      String text = "[[null, 123.45, \"a\tb c\"]}, true";

      try{
         Object obj = parser.parse(text);         
         System.out.println(obj);
      }catch(ParseException pe) {
         System.out.println("position: " + pe.getPosition());
         System.out.println(pe);
      }
   }
}

Salida

position: 24
Unexpected token RIGHT BRACE(}) at position 24.

ContainerFactory se puede utilizar para crear un contenedor personalizado para objetos / matrices JSON analizados. Primero necesitamos crear un objeto ContainerFactory y luego usarlo en el método de análisis de JSONParser para obtener el objeto requerido. Vea el ejemplo a continuación:

Ejemplo

import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.json.simple.parser.ContainerFactory;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

class JsonDemo {
   public static void main(String[] args) {
      JSONParser parser = new JSONParser();
      String text =  "{\"first\": 123, \"second\": [4, 5, 6], \"third\": 789}";
      ContainerFactory containerFactory = new ContainerFactory() {
         @Override
         public Map createObjectContainer() {
            return new LinkedHashMap<>();
         }
         @Override
         public List creatArrayContainer() {
            return new LinkedList<>();
         }
      };
      try {
         Map map = (Map)parser.parse(text, containerFactory);       
         map.forEach((k,v)->System.out.println("Key : " + k + " Value : " + v));
      } catch(ParseException pe) {
         System.out.println("position: " + pe.getPosition());
         System.out.println(pe);
      }
   }
}

Salida

Key : first Value : 123
Key : second Value : [4, 5, 6]
Key : third Value : 789

La interfaz ContentHandler se utiliza para proporcionar una interfaz similar a SAX para transmitir el json grande. También proporciona una capacidad que se puede detener. El siguiente ejemplo ilustra el concepto.

Ejemplo

import java.io.IOException;
import java.util.List;
import java.util.Stack;

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

class JsonDemo {
   public static void main(String[] args) {
      JSONParser parser = new JSONParser();
      String text =  "{\"first\": 123, \"second\": [4, 5, 6], \"third\": 789}";
      try {
         CustomContentHandler handler = new CustomContentHandler();
         parser.parse(text, handler,true);       
      } catch(ParseException pe) {
      }
   }
}
class CustomContentHandler implements ContentHandler {
   @Override
   public boolean endArray() throws ParseException, IOException {     
      System.out.println("inside endArray");
      return true;
   }
   @Override
   public void endJSON() throws ParseException, IOException {
      System.out.println("inside endJSON");
   }
   @Override
   public boolean endObject() throws ParseException, IOException {       
      System.out.println("inside endObject");
      return true;
   }
   @Override
   public boolean endObjectEntry() throws ParseException, IOException {
      System.out.println("inside endObjectEntry");
      return true;
   }
   public boolean primitive(Object value) throws ParseException, IOException {
      System.out.println("inside primitive: " + value);
      return true;
   }
   @Override
   public boolean startArray() throws ParseException, IOException {
      System.out.println("inside startArray");
      return true;
   }
   @Override
   public void startJSON() throws ParseException, IOException {
      System.out.println("inside startJSON");
   }
   @Override
   public boolean startObject() throws ParseException, IOException {
      System.out.println("inside startObject");      
      return true;
   }
   @Override
   public boolean startObjectEntry(String key) throws ParseException, IOException {
      System.out.println("inside startObjectEntry: " + key); 
      return true;
   }    
}

Salida

inside startJSON
inside startObject
inside startObjectEntry: first
inside primitive: 123
inside endObjectEntry
inside startObjectEntry: second
inside startArray
inside primitive: 4
inside primitive: 5
inside primitive: 6
inside endArray
inside endObjectEntry
inside startObjectEntry: third
inside primitive: 789
inside endObjectEntry
inside endObject
inside endJSON

Usando JSON.simple, podemos codificar un objeto JSON usando las siguientes formas:

  • Encode a JSON Object - to String - Codificación simple.

  • Encode a JSON Object - Streaming - La salida se puede utilizar para la transmisión.

  • Encode a JSON Object - Using Map - Codificación conservando el orden.

  • Encode a JSON Object - Using Map and Streaming - Codificación conservando el orden y transmisión.

El siguiente ejemplo ilustra los conceptos anteriores.

Ejemplo

import java.io.IOException;
import java.io.StringWriter;
import java.util.LinkedHashMap;
import java.util.Map;

import org.json.simple.JSONObject;
import org.json.simple.JSONValue;

class JsonDemo {
   public static void main(String[] args) throws IOException {
      JSONObject obj = new JSONObject();
      String jsonText;

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

      System.out.println("Encode a JSON Object - to String");
      System.out.print(jsonText);

      StringWriter out = new StringWriter();
      obj.writeJSONString(out);       
      jsonText = out.toString();

      System.out.println("\nEncode a JSON Object - Streaming");       
      System.out.print(jsonText);

      Map obj1 = new LinkedHashMap();
      obj1.put("name", "foo");
      obj1.put("num", new Integer(100));
      obj1.put("balance", new Double(1000.21));
      obj1.put("is_vip", new Boolean(true));

      jsonText = JSONValue.toJSONString(obj1); 
      System.out.println("\nEncode a JSON Object - Preserving Order");
      System.out.print(jsonText);

      out = new StringWriter();
      JSONValue.writeJSONString(obj1, out); 
      jsonText = out.toString();
      System.out.println("\nEncode a JSON Object - Preserving Order and Stream");
      System.out.print(jsonText);
   }
}

Salida

Encode a JSON Object - to String
{"balance":1000.21,"is_vip":true,"num":100,"name":"foo"}
Encode a JSON Object - Streaming
{"balance":1000.21,"is_vip":true,"num":100,"name":"foo"}
Encode a JSON Object - Preserving Order
{"name":"foo","num":100,"balance":1000.21,"is_vip":true}
Encode a JSON Object - Preserving Order and Stream
{"name":"foo","num":100,"balance":1000.21,"is_vip":true}

Usando JSON.simple, podemos codificar una matriz JSON usando las siguientes formas:

  • Encode a JSON Array - to String - Codificación simple.

  • Encode a JSON Array - Streaming - La salida se puede utilizar para la transmisión.

  • Encode a JSON Array - Using List - Codificación utilizando la lista.

  • Encode a JSON Array - Using List and Streaming - Codificación usando List y para transmitir.

El siguiente ejemplo ilustra los conceptos anteriores.

Ejemplo

import java.io.IOException;
import java.io.StringWriter;
import java.util.LinkedList;
import java.util.List;

import org.json.simple.JSONArray;
import org.json.simple.JSONValue;

class JsonDemo {
   public static void main(String[] args) throws IOException {
      JSONArray list = new JSONArray();
      String jsonText;

      list.add("foo");
      list.add(new Integer(100));
      list.add(new Double(1000.21));
      list.add(new Boolean(true));
      list.add(null);
      jsonText = list.toString();

      System.out.println("Encode a JSON Array - to String");
      System.out.print(jsonText);

      StringWriter out = new StringWriter();
      list.writeJSONString(out);       
      jsonText = out.toString();

      System.out.println("\nEncode a JSON Array - Streaming");       
      System.out.print(jsonText);

      List list1 = new LinkedList();
      list1.add("foo");
      list1.add(new Integer(100));
      list1.add(new Double(1000.21));
      list1.add(new Boolean(true));
      list1.add(null);

      jsonText = JSONValue.toJSONString(list1); 
      System.out.println("\nEncode a JSON Array - Using List");
      System.out.print(jsonText);

      out = new StringWriter();
      JSONValue.writeJSONString(list1, out); 
      jsonText = out.toString();
      System.out.println("\nEncode a JSON Array - Using List and Stream");
      System.out.print(jsonText);
   }
}

Salida

Encode a JSON Array - to String
["foo",100,1000.21,true,null]
Encode a JSON Array - Streaming
["foo",100,1000.21,true,null]
Encode a JSON Array - Using List
["foo",100,1000.21,true,null]
Encode a JSON Array - Using List and Stream
["foo",100,1000.21,true,null]

En JSON.simple, podemos fusionar dos objetos JSON fácilmente usando el método JSONObject.putAll ().

El siguiente ejemplo ilustra el concepto anterior.

Ejemplo

import java.io.IOException;
import org.json.simple.JSONObject;

class JsonDemo {
   public static void main(String[] args) throws IOException {
      JSONObject obj1 = new JSONObject();       
      obj1.put("name", "foo");
      obj1.put("num", new Integer(100)); 

      JSONObject obj2 = new JSONObject();       
      obj2.put("balance", new Double(1000.21));
      obj2.put("is_vip", new Boolean(true));       
      obj1.putAll(obj2);       
      System.out.println(obj1);
   }
}

Salida

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

En JSON.simple, podemos fusionar dos matrices JSON fácilmente usando el método JSONArray.addAll ().

El siguiente ejemplo ilustra el concepto anterior.

Ejemplo

import java.io.IOException;
import org.json.simple.JSONArray;

class JsonDemo {
   public static void main(String[] args) throws IOException {
      JSONArray list1 = new JSONArray();
      list1.add("foo");
      list1.add(new Integer(100));

      JSONArray list2 = new JSONArray();       
      list2.add(new Double(1000.21));
      list2.add(new Boolean(true));
      list2.add(null);

      list1.addAll(list2);       
      System.out.println(list1);       
   }
}

Salida

["foo",100,1000.21,true,null]

Usando el objeto JSONArray, podemos crear un JSON que se compone de primitivas, objeto y matriz.

El siguiente ejemplo ilustra el concepto anterior.

Ejemplo

import java.io.IOException;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

class JsonDemo {
   public static void main(String[] args) throws IOException {
      JSONArray list1 = new JSONArray();
      list1.add("foo");
      list1.add(new Integer(100));

      JSONArray list2 = new JSONArray();       
      list2.add(new Double(1000.21));
      list2.add(new Boolean(true));
      list2.add(null);

      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));
     
      obj.put("list1", list1); 
      obj.put("list2", list2);
      System.out.println(obj);       
   }
}

Salida

{"list1":["foo",100],"balance":1000.21,"is_vip":true,"num":100,"list2":[1000.21,true,null],"name":"foo"}

Usando el objeto JSONValue, podemos crear un JSON que se compone de primitivas, Map y List.

El siguiente ejemplo ilustra el concepto anterior.

Ejemplo

import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.json.simple.JSONValue;

class JsonDemo {
   public static void main(String[] args) throws IOException {
      Map m1 = new LinkedHashMap(); 
      m1.put("k11","v11"); 
      m1.put("k12","v12"); 
      m1.put("k13", "v13");

      List l1 = new LinkedList();
      l1.add(m1);
      l1.add(new Integer(100));

      String jsonString = JSONValue.toJSONString(l1);
      System.out.println(jsonString);
   }
}

Salida

[{"k11":"v11","k12":"v12","k13":"v13"},100]

Usando el objeto JSONValue, podemos crear un JSON que se compone de primitivas, Objeto, Mapa y Lista.

El siguiente ejemplo ilustra el concepto anterior.

Ejemplo

import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.json.simple.JSONObject;
import org.json.simple.JSONValue;

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

      Map m1 = new LinkedHashMap(); 
      m1.put("k11","v11");
      m1.put("k12","v12");
      m1.put("k13", "v13");

      List l1 = new LinkedList();      
      l1.add(new Integer(100));

      obj.put("m1", m1);
      obj.put("l1", l1);
      String jsonString = JSONValue.toJSONString(obj);
      System.out.println(jsonString);
   }
}

Salida

{"m1":{"k11":"v11","k12":"v12","k13":"v13"},"l1":[100]}

Podemos personalizar la salida JSON en función de la clase personalizada. El único requisito es implementar la interfaz JSONAware.

El siguiente ejemplo ilustra el concepto anterior.

Ejemplo

import java.io.IOException;

import org.json.simple.JSONArray;
import org.json.simple.JSONAware;
import org.json.simple.JSONObject;

class JsonDemo {
   public static void main(String[] args) throws IOException {
      JSONArray students = new JSONArray(); 
      students.add(new Student(1,"Robert")); 
      students.add(new Student(2,"Julia")); 

      System.out.println(students);     
   }
}
class Student implements JSONAware {
   int rollNo;
   String name;
   Student(int rollNo, String name){
      this.rollNo = rollNo;
      this.name = name;
   }
   @Override
   public String toJSONString() {
      StringBuilder sb = new StringBuilder();
      sb.append("{");
      sb.append("name");
      sb.append(":");
      sb.append("\"" + JSONObject.escape(name) + "\"");
      sb.append(",");
      sb.append("rollNo");
      sb.append(":");
      sb.append(rollNo);
      sb.append("}");
      return sb.toString();
   }    
}

Salida

[{name:"Robert",rollNo:1},{name:"Julia",rollNo:2}]

Podemos personalizar la salida de transmisión JSON en función de la clase personalizada. El único requisito es implementar la interfaz JSONStreamAware.

El siguiente ejemplo ilustra el concepto anterior.

Ejemplo

import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.LinkedHashMap;
import java.util.Map;

import org.json.simple.JSONArray;
import org.json.simple.JSONStreamAware;
import org.json.simple.JSONValue;

class JsonDemo {
   public static void main(String[] args) throws IOException {
      JSONArray students = new JSONArray(); 
      students.add(new Student(1,"Robert")); 
      students.add(new Student(2,"Julia")); 
      StringWriter out = new StringWriter();
      students.writeJSONString(out); 
      System.out.println(out.toString());     
   }
}
class Student implements JSONStreamAware {
   int rollNo;
   String name;

   Student(int rollNo, String name){
      this.rollNo = rollNo;
      this.name = name;
   }
   @Override
   public void writeJSONString(Writer out) throws IOException {
      Map obj = new LinkedHashMap();
      obj.put("name", name);
      obj.put("rollNo", new Integer(rollNo));
      JSONValue.writeJSONString(obj, out);        
   }    
}

Salida

[{name:"Robert",rollNo:1},{name:"Julia",rollNo:2}]