JSON.simple - Hướng dẫn nhanh
JSON.simplelà một bộ công cụ dựa trên Java đơn giản cho JSON. Bạn có thể sử dụng JSON.simple để mã hóa hoặc giải mã dữ liệu JSON.
Đặc trưng
Specification Compliant - JSON.simple hoàn toàn tuân thủ Đặc điểm kỹ thuật JSON - RFC4627.
Lightweight - Nó có rất ít lớp và cung cấp các chức năng cần thiết như mã hóa / giải mã và thoát json.
Reuses Collections - Hầu hết các hoạt động được thực hiện bằng cách sử dụng giao diện Bản đồ / Danh sách làm tăng khả năng tái sử dụng.
Streaming supported - Hỗ trợ phát trực tuyến văn bản đầu ra JSON.
SAX like Content Handler - Cung cấp giao diện giống SAX để truyền tải lượng lớn dữ liệu JSON.
High performance - Trình phân tích cú pháp dựa trên đống được sử dụng và cung cấp hiệu suất cao.
No dependency- Không phụ thuộc thư viện bên ngoài. Có thể được bao gồm độc lập.
JDK1.2 compatible - Mã nguồn và mã nhị phân tương thích với JDK1.2
Thiết lập môi trường cục bộ
JSON.simple là một thư viện dành cho Java, vì vậy yêu cầu đầu tiên là phải cài đặt JDK trong máy của bạn.
Yêu cầu hệ thống
JDK | Ký ức | Dung lượng đĩa | Hệ điều hành |
---|---|---|---|
1,5 trở lên. | Không có yêu cầu tối thiểu. | Không có yêu cầu tối thiểu. | Không có yêu cầu tối thiểu. |
Bước 1: Xác minh cài đặt Java trong máy của bạn
Trước hết, mở bảng điều khiển và thực hiện một lệnh java dựa trên hệ điều hành bạn đang làm việc.
Hệ điều hành | Bài tập | Chỉ huy |
---|---|---|
các cửa sổ | Mở bảng điều khiển lệnh | c: \> java -version |
Linux | Mở Command Terminal | $ java -version |
Mac | Mở thiết bị đầu cuối | máy: <joseph $ java -version |
Hãy xác minh kết quả đầu ra cho tất cả các hệ điều hành -
Hệ điều hành | Đầu ra |
---|---|
các cửa sổ | phiên bản java "1.8.0_101" Môi trường thời gian chạy Java (TM) SE (bản dựng 1.8.0_101) |
Linux | phiên bản java "1.8.0_101" Môi trường thời gian chạy Java (TM) SE (bản dựng 1.8.0_101) |
Mac | phiên bản java "1.8.0_101" Môi trường thời gian chạy Java (TM) SE (bản dựng 1.8.0_101) |
Nếu bạn chưa cài đặt Java trên hệ thống của mình, hãy tải xuống Bộ phát triển phần mềm Java (SDK) từ liên kết sau www.oracle.com . Chúng tôi giả sử Java 1.8.0_101 là phiên bản đã cài đặt cho hướng dẫn này.
Bước 2: Đặt Môi trường JAVA
Đặt JAVA_HOMEbiến môi trường để trỏ đến vị trí thư mục cơ sở nơi Java được cài đặt trên máy của bạn. Ví dụ.
Hệ điều hành | Đầu ra |
---|---|
các cửa sổ | Đặt biến môi trường JAVA_HOME thành C: \ Program Files \ Java \ jdk1.8.0_101 |
Linux | xuất JAVA_HOME = / usr / local / java-current |
Mac | export JAVA_HOME = / Library / Java / Home |
Nối vị trí trình biên dịch Java vào Đường dẫn Hệ thống.
Hệ điều hành | Đầu ra |
---|---|
các cửa sổ | Nối chuỗi C:\Program Files\Java\jdk1.8.0_101\bin ở cuối biến hệ thống, Path. |
Linux | xuất PATH = $ PATH: $ JAVA_HOME / bin / |
Mac | không yêu cầu |
Xác minh cài đặt Java bằng lệnh java -version Như đã giải thích ở trên.
Bước 3: Tải xuống JSON.simple Archive
Tải xuống phiên bản mới nhất của tệp jar JSON.simple từ json-simple @ MVNRepository . Tại thời điểm viết hướng dẫn này, chúng tôi đã tải xuống json-simple-1.1.1.jar và sao chép nó vào thư mục C: \> JSON.
Hệ điều hành | Tên lưu trữ |
---|---|
các cửa sổ | json-simple-1.1.1.jar |
Linux | json-simple-1.1.1.jar |
Mac | json-simple-1.1.1.jar |
Bước 4: Đặt Môi trường JSON_JAVA
Đặt JSON_JAVAbiến môi trường để trỏ đến vị trí thư mục cơ sở nơi lưu trữ jar JSON.simple trên máy của bạn. Giả sử chúng ta đã lưu trữ json-simple-1.1.1.jar trong thư mục JSON.
Sr.No | Hệ điều hành & Mô tả |
---|---|
1 | Windows Đặt biến môi trường JSON_JAVA thành C: \ JSON |
2 | Linux xuất JSON_JAVA = / usr / local / JSON |
3 | Mac xuất JSON_JAVA = / Library / JSON |
Bước 5: Đặt biến CLASSPATH
Đặt CLASSPATH biến môi trường để trỏ đến vị trí jar JSON.simple.
Sr.No | Hệ điều hành & Mô tả |
---|---|
1 | Windows Đặt biến môi trường CLASSPATH thành% CLASSPATH%;% JSON_JAVA% \ json-simple-1.1.1.jar;.; |
2 | Linux xuất CLASSPATH = $ CLASSPATH: $ JSON_JAVA / json-simple-1.1.1.jar:. |
3 | Mac xuất CLASSPATH = $ CLASSPATH: $ JSON_JAVA / json-simple-1.1.1.jar:. |
JSON.simple ánh xạ các thực thể từ bên trái sang bên phải trong khi giải mã hoặc phân tích cú pháp và ánh xạ các thực thể từ bên phải sang bên trái trong khi mã hóa.
JSON | Java |
---|---|
chuỗi | java.lang.String |
con số | java.lang.Number |
đúng | sai | java.lang.Boolean |
vô giá trị | vô giá trị |
mảng | java.util.List |
vật | java.util.Map |
Khi giải mã, lớp cụ thể mặc định của java.util.List là org.json.simple.JSONArray và lớp cụ thể mặc định của java.util.Map là org.json.simple.JSONObject .
Các ký tự sau là các ký tự dành riêng và không thể được sử dụng trong JSON và phải được thoát đúng cách để được sử dụng trong chuỗi.
Backspace được thay thế bằng \ b
Form feed được thay thế bằng \ f
Newline được thay thế bằng \ n
Carriage return được thay thế bằng \ r
Tab được thay thế bằng \ t
Double quote được thay thế bằng \ "
Backslash được thay thế bằng \\
JSONObject.escape()phương pháp này có thể được sử dụng để thoát các từ khóa dành riêng như vậy trong chuỗi JSON. Sau đây là ví dụ -
Thí dụ
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);
}
}
Đầu ra
Text with special character /"'
.
After escaping.
Text with special character \/\"'\b\f\t\r\n.
JSONValue cung cấp một phương thức tĩnh phân tích cú pháp () để phân tích cú pháp chuỗi json đã cho để trả về một JSONObject sau đó có thể được sử dụng để nhận các giá trị được phân tích cú pháp. Xem ví dụ bên dưới.
Thí dụ
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);
}
}
Đầu ra
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 () ném ParseException trong trường hợp JSON không hợp lệ. Ví dụ sau cho thấy cách xử lý ParseException.
Thí dụ
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);
}
}
}
Đầu ra
position: 24
Unexpected token RIGHT BRACE(}) at position 24.
ContainerFactory có thể được sử dụng để tạo Vùng chứa tùy chỉnh cho các đối tượng / mảng JSON được phân tích cú pháp. Trước tiên, chúng ta cần tạo một đối tượng ContainerFactory và sau đó sử dụng nó trong Phương thức phân tích cú pháp của JSONParser để lấy đối tượng cần thiết. Xem ví dụ bên dưới -
Thí dụ
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);
}
}
}
Đầu ra
Key : first Value : 123
Key : second Value : [4, 5, 6]
Key : third Value : 789
Giao diện ContentHandler được sử dụng để cung cấp giao diện giống SAX để phát trực tuyến json lớn. Nó cũng cung cấp khả năng dừng lại. Ví dụ sau minh họa khái niệm.
Thí dụ
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;
}
}
Đầu ra
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
Sử dụng JSON.simple, chúng ta có thể mã hóa một Đối tượng JSON bằng các cách sau:
Encode a JSON Object - to String - Mã hóa đơn giản.
Encode a JSON Object - Streaming - Đầu ra có thể được sử dụng để phát trực tuyến.
Encode a JSON Object - Using Map - Mã hóa bằng cách bảo lưu thứ tự.
Encode a JSON Object - Using Map and Streaming - Mã hóa bằng cách bảo toàn thứ tự và để phát trực tiếp.
Ví dụ sau minh họa các khái niệm trên.
Thí dụ
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);
}
}
Đầu ra
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}
Sử dụng JSON.simple, chúng ta có thể mã hóa một mảng JSON bằng các cách sau:
Encode a JSON Array - to String - Mã hóa đơn giản.
Encode a JSON Array - Streaming - Đầu ra có thể được sử dụng để phát trực tuyến.
Encode a JSON Array - Using List - Mã hóa bằng cách sử dụng Danh sách.
Encode a JSON Array - Using List and Streaming - Mã hóa bằng cách sử dụng Danh sách và để phát trực tuyến.
Ví dụ sau minh họa các khái niệm trên.
Thí dụ
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);
}
}
Đầu ra
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]
Trong JSON.simple, chúng ta có thể hợp nhất hai Đối tượng JSON một cách dễ dàng bằng cách sử dụng phương thức JSONObject.putAll ().
Ví dụ sau minh họa khái niệm trên.
Thí dụ
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);
}
}
Đầu ra
{"balance":1000.21,"is_vip":true,"num":100,"name":"foo"}
Trong JSON.simple, chúng ta có thể hợp nhất hai Mảng JSON một cách dễ dàng bằng cách sử dụng phương thức JSONArray.addAll ().
Ví dụ sau minh họa khái niệm trên.
Thí dụ
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);
}
}
Đầu ra
["foo",100,1000.21,true,null]
Sử dụng đối tượng JSONArray, chúng ta có thể tạo một JSON bao gồm các nguyên thủy, đối tượng và mảng.
Ví dụ sau minh họa khái niệm trên.
Thí dụ
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);
}
}
Đầu ra
{"list1":["foo",100],"balance":1000.21,"is_vip":true,"num":100,"list2":[1000.21,true,null],"name":"foo"}
Sử dụng đối tượng JSONValue, chúng ta có thể tạo một JSON bao gồm các nguyên thủy, Bản đồ và Danh sách.
Ví dụ sau minh họa khái niệm trên.
Thí dụ
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);
}
}
Đầu ra
[{"k11":"v11","k12":"v12","k13":"v13"},100]
Sử dụng đối tượng JSONValue, chúng ta có thể tạo một JSON bao gồm các nguyên thủy, Đối tượng, Bản đồ và Danh sách.
Ví dụ sau minh họa khái niệm trên.
Thí dụ
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);
}
}
Đầu ra
{"m1":{"k11":"v11","k12":"v12","k13":"v13"},"l1":[100]}
Chúng tôi có thể tùy chỉnh đầu ra JSON dựa trên lớp tùy chỉnh. Yêu cầu duy nhất là triển khai giao diện JSONAware.
Ví dụ sau minh họa khái niệm trên.
Thí dụ
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();
}
}
Đầu ra
[{name:"Robert",rollNo:1},{name:"Julia",rollNo:2}]
Chúng tôi có thể tùy chỉnh đầu ra phát trực tuyến JSON dựa trên lớp tùy chỉnh. Yêu cầu duy nhất là triển khai giao diện JSONStreamAware.
Ví dụ sau minh họa khái niệm trên.
Thí dụ
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);
}
}
Đầu ra
[{name:"Robert",rollNo:1},{name:"Julia",rollNo:2}]