JSON.simple - Panduan Cepat

JSON.simpleadalah toolkit berbasis Java sederhana untuk JSON. Anda dapat menggunakan JSON.simple untuk mengenkode atau mendekode data JSON.

fitur

  • Specification Compliant - JSON.simple sepenuhnya sesuai dengan Spesifikasi JSON - RFC4627.

  • Lightweight - Memiliki sangat sedikit kelas dan menyediakan fungsionalitas yang diperlukan seperti encode / decode dan escaping json.

  • Reuses Collections - Sebagian besar operasi dilakukan menggunakan antarmuka Map / List yang meningkatkan penggunaan kembali.

  • Streaming supported - Mendukung streaming teks keluaran JSON.

  • SAX like Content Handler - Menyediakan antarmuka seperti SAX untuk mengalirkan data JSON dalam jumlah besar.

  • High performance - Pengurai berbasis heap digunakan dan memberikan performa tinggi.

  • No dependency- Tidak ada ketergantungan perpustakaan eksternal. Dapat dimasukkan secara independen.

  • JDK1.2 compatible - Kode sumber dan biner kompatibel dengan JDK1.2

Pengaturan Lingkungan Lokal

JSON.simple adalah pustaka untuk Java, jadi persyaratan pertama adalah memasang JDK di mesin Anda.

Persyaratan Sistem

JDK Penyimpanan Ruang Disk Sistem operasi
1.5 atau lebih tinggi. Tidak ada persyaratan minimum. Tidak ada persyaratan minimum. Tidak ada persyaratan minimum.

Langkah 1: Verifikasi Instalasi Java di Mesin Anda

Pertama-tama, buka konsol dan jalankan perintah java berdasarkan sistem operasi yang Anda kerjakan.

OS Tugas Perintah
Windows Buka Konsol Perintah c: \> java -version
Linux Buka Terminal Perintah $ java -version
Mac Buka Terminal mesin: <joseph $ java -version

Mari verifikasi output untuk semua sistem operasi -

OS Keluaran
Windows

versi java "1.8.0_101"

Java (TM) SE Runtime Environment (build 1.8.0_101)

Linux

versi java "1.8.0_101"

Java (TM) SE Runtime Environment (build 1.8.0_101)

Mac

versi java "1.8.0_101"

Java (TM) SE Runtime Environment (build 1.8.0_101)

Jika Anda belum menginstal Java pada sistem Anda, unduh Java Software Development Kit (SDK) dari tautan berikut www.oracle.com . Kami mengasumsikan Java 1.8.0_101 sebagai versi yang diinstal untuk tutorial ini.

Langkah 2: Setel Lingkungan JAVA

Mengatur JAVA_HOMEvariabel lingkungan untuk menunjuk ke lokasi direktori dasar tempat Java diinstal pada mesin Anda. Sebagai contoh.

OS Keluaran
Windows Setel variabel lingkungan JAVA_HOME ke C: \ Program Files \ Java \ jdk1.8.0_101
Linux ekspor JAVA_HOME = / usr / local / java-current
Mac ekspor JAVA_HOME = / Library / Java / Home

Tambahkan lokasi compiler Java ke System Path.

OS Keluaran
Windows Tambahkan string C:\Program Files\Java\jdk1.8.0_101\bin di akhir variabel sistem, Path.
Linux ekspor PATH = $ PATH: $ JAVA_HOME / bin /
Mac tidak dibutuhkan

Verifikasi instalasi Java menggunakan perintah java -version seperti yang dijelaskan di atas.

Langkah 3: Unduh JSON.simple Archive

Unduh versi terbaru file JSON.simple jar dari json-simple @ MVNRepository . Pada saat menulis tutorial ini, kami telah mengunduh json-simple-1.1.1.jar, dan menyalinnya ke folder C: \> JSON.

OS Nama arsip
Windows json-simple-1.1.1.jar
Linux json-simple-1.1.1.jar
Mac json-simple-1.1.1.jar

Langkah 4: Setel Lingkungan JSON_JAVA

Mengatur JSON_JAVAvariabel lingkungan untuk menunjuk ke lokasi direktori dasar tempat JSON.simple jar disimpan di komputer Anda. Mari kita asumsikan kita telah menyimpan json-simple-1.1.1.jar di folder JSON.

Sr Tidak OS & Deskripsi
1

Windows

Setel variabel lingkungan JSON_JAVA ke C: \ JSON

2

Linux

ekspor JSON_JAVA = / usr / local / JSON

3

Mac

ekspor JSON_JAVA = / Library / JSON

Langkah 5: Setel Variabel CLASSPATH

Mengatur CLASSPATH variabel lingkungan untuk diarahkan ke lokasi jar JSON.simple.

Sr Tidak OS & Deskripsi
1

Windows

Setel variabel lingkungan CLASSPATH ke% CLASSPATH%;% JSON_JAVA% \ json-simple-1.1.1.jar;.;

2

Linux

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

3

Mac

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

JSON. Entitas peta sederhana dari sisi kiri ke sisi kanan saat mendekode atau parsing, dan entitas peta dari kanan ke kiri saat encoding.

JSON Jawa
tali java.lang.String
jumlah java.lang.Number
benar | salah java.lang.Boolean
batal batal
Himpunan java.util.List
obyek java.util.Map

Saat mendekode, kelas beton default java.util.List adalah org.json.simple.JSONArray dan kelas beton default java.util.Map adalah org.json.simple.JSONObject .

Karakter berikut adalah karakter yang dicadangkan dan tidak dapat digunakan di JSON dan harus di-escape dengan benar untuk digunakan dalam string.

  • Backspace untuk diganti dengan \ b

  • Form feed untuk diganti dengan \ f

  • Newline untuk diganti dengan \ n

  • Carriage return untuk diganti dengan \ r

  • Tab untuk diganti dengan \ t

  • Double quote untuk diganti dengan \ "

  • Backslash untuk diganti dengan \\

JSONObject.escape()metode dapat digunakan untuk keluar dari kata kunci yang dipesan seperti itu dalam String JSON. Berikut contohnya -

Contoh

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

Keluaran

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

JSONValue menyediakan metode statis parse () untuk mengurai string json yang diberikan guna mengembalikan JSONObject yang kemudian bisa digunakan untuk mendapatkan nilai yang diurai. Lihat contoh di bawah ini.

Contoh

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

Keluaran

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 () menampilkan ParseException jika JSON tidak valid. Contoh berikut menunjukkan cara menangani ParseException.

Contoh

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

Keluaran

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

ContainerFactory dapat digunakan untuk membuat container kustom untuk objek / array JSON yang diurai. Pertama kita perlu membuat objek ContainerFactory dan kemudian menggunakannya dalam Metode parse JSONParser untuk mendapatkan objek yang diperlukan. Lihat contoh di bawah -

Contoh

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

Keluaran

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

Antarmuka ContentHandler digunakan untuk menyediakan antarmuka seperti SAX untuk mengalirkan json besar. Ini memberikan kemampuan yang dapat dihentikan juga. Contoh berikut menggambarkan konsep tersebut.

Contoh

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

Keluaran

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

Menggunakan JSON.simple, kita dapat menyandikan Objek JSON menggunakan cara berikut -

  • Encode a JSON Object - to String - Pengkodean sederhana.

  • Encode a JSON Object - Streaming - Output dapat digunakan untuk streaming.

  • Encode a JSON Object - Using Map - Pengkodean dengan mempertahankan pesanan.

  • Encode a JSON Object - Using Map and Streaming - Pengkodean dengan menjaga urutan dan streaming.

Contoh berikut menggambarkan konsep di atas.

Contoh

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

Keluaran

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}

Menggunakan JSON.simple, kita dapat menyandikan Array JSON menggunakan cara berikut -

  • Encode a JSON Array - to String - Pengkodean sederhana.

  • Encode a JSON Array - Streaming - Output dapat digunakan untuk streaming.

  • Encode a JSON Array - Using List - Pengkodean dengan menggunakan Daftar.

  • Encode a JSON Array - Using List and Streaming - Pengkodean dengan menggunakan Daftar dan streaming.

Contoh berikut menggambarkan konsep di atas.

Contoh

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

Keluaran

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]

Dalam JSON.simple, kita dapat menggabungkan dua Objek JSON dengan mudah menggunakan metode JSONObject.putAll ().

Contoh berikut menggambarkan konsep di atas.

Contoh

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

Keluaran

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

Di JSON.simple, kita bisa menggabungkan dua JSON Array dengan mudah menggunakan metode JSONArray.addAll ().

Contoh berikut menggambarkan konsep di atas.

Contoh

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

Keluaran

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

Dengan menggunakan objek JSONArray, kita dapat membuat JSON yang terdiri dari primitif, objek dan array.

Contoh berikut menggambarkan konsep di atas.

Contoh

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

Keluaran

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

Dengan menggunakan objek JSONValue, kita dapat membuat JSON yang terdiri dari primitif, Map dan List.

Contoh berikut menggambarkan konsep di atas.

Contoh

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

Keluaran

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

Dengan menggunakan objek JSONValue, kita dapat membuat JSON yang terdiri dari primitif, Object, Map dan List.

Contoh berikut menggambarkan konsep di atas.

Contoh

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

Keluaran

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

Kami dapat menyesuaikan output JSON berdasarkan kelas khusus. Satu-satunya persyaratan adalah mengimplementasikan antarmuka JSONAware.

Contoh berikut menggambarkan konsep di atas.

Contoh

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

Keluaran

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

Kami dapat menyesuaikan keluaran streaming JSON berdasarkan kelas khusus. Satu-satunya persyaratan adalah mengimplementasikan antarmuka JSONStreamAware.

Contoh berikut menggambarkan konsep di atas.

Contoh

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

Keluaran

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