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