JSON.simple - Краткое руководство

JSON.simpleпредставляет собой простой набор инструментов для JSON на основе Java. Вы можете использовать JSON.simple для кодирования или декодирования данных JSON.

Особенности

  • Specification Compliant - JSON.simple полностью соответствует спецификации JSON - RFC4627.

  • Lightweight - Он имеет очень мало классов и предоставляет необходимые функции, такие как кодирование / декодирование и экранирование json.

  • Reuses Collections - Большинство операций выполняется с использованием интерфейсов Map / List, что увеличивает возможность повторного использования.

  • Streaming supported - Поддерживает потоковую передачу выходного текста JSON.

  • SAX like Content Handler - Предоставляет интерфейс, подобный SAX, для потоковой передачи большого количества данных JSON.

  • High performance - Используется парсер на основе кучи, обеспечивающий высокую производительность.

  • No dependency- Нет зависимости от внешней библиотеки. Могут быть включены независимо.

  • JDK1.2 compatible - Исходный код и двоичный файл совместимы с JDK1.2

Настройка локальной среды

JSON.simple - это библиотека для Java, поэтому самое первое требование - установить JDK на вашем компьютере.

Системные требования

JDK объем памяти Дисковое пространство Операционная система
1.5 или выше. Нет минимальных требований. Нет минимальных требований. Нет минимальных требований.

Шаг 1. Проверьте установку Java на вашем компьютере

Прежде всего, откройте консоль и выполните java-команду в зависимости от операционной системы, над которой вы работаете.

Операционные системы Задача Команда
Windows Открыть командную консоль c: \> java -версия
Linux Открыть командный терминал $ java -версия
Mac Открыть Терминал машина: <joseph $ java -version

Давайте проверим вывод для всех операционных систем -

Операционные системы Вывод
Windows

версия java "1.8.0_101"

Среда выполнения Java (TM) SE (сборка 1.8.0_101)

Linux

версия java "1.8.0_101"

Среда выполнения Java (TM) SE (сборка 1.8.0_101)

Mac

версия java "1.8.0_101"

Среда выполнения Java (TM) SE (сборка 1.8.0_101)

Если в вашей системе не установлена ​​Java, загрузите Java Software Development Kit (SDK) по следующей ссылке www.oracle.com . Мы предполагаем, что Java 1.8.0_101 является установленной версией для этого руководства.

Шаг 2: Установите среду JAVA

Установить JAVA_HOMEпеременная среды, указывающая на расположение базового каталога, в котором установлена ​​Java на вашем компьютере. Например.

Операционные системы Вывод
Windows Установите для переменной среды JAVA_HOME значение C: \ Program Files \ Java \ jdk1.8.0_101
Linux экспорт JAVA_HOME = / usr / local / java-current
Mac экспорт JAVA_HOME = / Библиотека / Java / Home

Добавьте расположение компилятора Java в системный путь.

Операционные системы Вывод
Windows Добавить строку C:\Program Files\Java\jdk1.8.0_101\bin в конце системной переменной, Path.
Linux экспорт ПУТЬ = $ ПУТЬ: $ JAVA_HOME / bin /
Mac не требуется

Проверьте установку Java с помощью команды java -version как объяснено выше.

Шаг 3. Загрузите архив JSON.simple

Загрузите последнюю версию jar-файла JSON.simple из json-simple @ MVNRepository . На момент написания этого руководства мы загрузили json-simple-1.1.1.jar и скопировали его в папку C: \> JSON.

Операционные системы Имя архива
Windows json-simple-1.1.1.jar
Linux json-simple-1.1.1.jar
Mac json-simple-1.1.1.jar

Шаг 4: Установите среду JSON_JAVA

Установить JSON_JAVAпеременная среды, указывающая на расположение базового каталога, в котором на вашем компьютере хранится JSON.simple jar. Предположим, мы сохранили json-simple-1.1.1.jar в папке JSON.

Старший Нет ОС и описание
1

Windows

Установите для переменной среды JSON_JAVA значение C: \ JSON

2

Linux

экспорт JSON_JAVA = / usr / local / JSON

3

Mac

экспорт JSON_JAVA = / Библиотека / JSON

Шаг 5: установите переменную CLASSPATH

Установить CLASSPATH переменная среды, указывающая на расположение jar-файла JSON.simple.

Старший Нет ОС и описание
1

Windows

Установите для переменной среды CLASSPATH значение% CLASSPATH%;% JSON_JAVA% \ json-simple-1.1.1.jar;.;

2

Linux

экспорт CLASSPATH = $ CLASSPATH: $ JSON_JAVA / json-simple-1.1.1.jar :.

3

Mac

экспорт CLASSPATH = $ CLASSPATH: $ JSON_JAVA / json-simple-1.1.1.jar :.

JSON.simple отображает сущности с левой стороны на правую при декодировании или синтаксическом анализе и сопоставляет сущности справа налево при кодировании.

JSON Ява
строка java.lang.String
количество java.lang.Number
истина | ложь java.lang.Boolean
ноль ноль
массив java.util.List
объект java.util.Map

При декодировании конкретным классом по умолчанию для java.util.List является org.json.simple.JSONArray, а конкретным классом по умолчанию для java.util.Map является org.json.simple.JSONObject .

Следующие ниже символы являются зарезервированными символами и не могут использоваться в JSON и должны быть правильно экранированы для использования в строках.

  • Backspace заменить на \ b

  • Form feed заменить на \ f

  • Newline заменить на \ n

  • Carriage return заменить на \ r

  • Tab заменить на \ t

  • Double quote заменить на \ "

  • Backslash заменить на \\

JSONObject.escape()может использоваться для экранирования таких зарезервированных ключевых слов в строке JSON. Ниже приведен пример -

пример

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

Вывод

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

JSONValue предоставляет статический метод parse () для анализа заданной строки json для возврата объекта JSONObject, который затем можно использовать для анализа значений. См. Пример ниже.

пример

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

Вывод

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 () выдает исключение ParseException в случае недопустимого JSON. В следующем примере показано, как обрабатывать исключение ParseException.

пример

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

Вывод

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

ContainerFactory можно использовать для создания настраиваемого контейнера для анализируемых объектов / массивов JSON. Сначала нам нужно создать объект ContainerFactory, а затем использовать его в методе синтаксического анализа JSONParser, чтобы получить требуемый объект. См. Пример ниже -

пример

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

Вывод

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

Интерфейс ContentHandler используется для предоставления SAX-подобного интерфейса для потоковой передачи большого json-файла. Он также обеспечивает возможность остановки. Следующий пример иллюстрирует концепцию.

пример

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

Вывод

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

Используя JSON.simple, мы можем закодировать объект JSON следующими способами:

  • Encode a JSON Object - to String - Простое кодирование.

  • Encode a JSON Object - Streaming - Вывод можно использовать для потоковой передачи.

  • Encode a JSON Object - Using Map - Кодирование с сохранением порядка.

  • Encode a JSON Object - Using Map and Streaming - Кодирование с сохранением порядка и в потоковом режиме.

Следующий пример иллюстрирует вышеуказанные концепции.

пример

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

Вывод

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}

Используя JSON.simple, мы можем кодировать массив JSON, используя следующие способы:

  • Encode a JSON Array - to String - Простое кодирование.

  • Encode a JSON Array - Streaming - Вывод можно использовать для потоковой передачи.

  • Encode a JSON Array - Using List - Кодирование с использованием списка.

  • Encode a JSON Array - Using List and Streaming - Кодирование с помощью списка и для потоковой передачи.

Следующий пример иллюстрирует вышеуказанные концепции.

пример

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

Вывод

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]

В JSON.simple мы можем легко объединить два объекта JSON с помощью метода JSONObject.putAll ().

Следующий пример иллюстрирует вышеуказанную концепцию.

пример

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

Вывод

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

В JSON.simple мы можем легко объединить два массива JSON с помощью метода JSONArray.addAll ().

Следующий пример иллюстрирует вышеуказанную концепцию.

пример

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

Вывод

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

Используя объект JSONArray, мы можем создать JSON, который состоит из примитивов, объекта и массива.

Следующий пример иллюстрирует вышеуказанную концепцию.

пример

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

Вывод

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

Используя объект JSONValue, мы можем создать JSON, который состоит из примитивов, карты и списка.

Следующий пример иллюстрирует вышеуказанную концепцию.

пример

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

Вывод

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

Используя объект JSONValue, мы можем создать JSON, который состоит из примитивов, объекта, карты и списка.

Следующий пример иллюстрирует вышеуказанную концепцию.

пример

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

Вывод

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

Мы можем настроить вывод JSON на основе настраиваемого класса. Единственное требование - реализовать интерфейс JSONAware.

Следующий пример иллюстрирует вышеуказанную концепцию.

пример

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

Вывод

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

Мы можем настроить вывод потоковой передачи JSON на основе настраиваемого класса. Единственное требование - реализовать интерфейс JSONStreamAware.

Следующий пример иллюстрирует вышеуказанную концепцию.

пример

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

Вывод

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