JSON với Java
Chương này trình bày cách mã hóa và giải mã các đối tượng JSON bằng ngôn ngữ lập trình Java. Hãy bắt đầu với việc chuẩn bị môi trường để bắt đầu lập trình với Java cho JSON.
Môi trường
Trước khi bắt đầu mã hóa và giải mã JSON bằng Java, bạn cần cài đặt bất kỳ mô-đun JSON nào có sẵn. Đối với hướng dẫn này, chúng tôi đã tải xuống và cài đặt JSON.simple và đã thêm vị trí củajson-simple-1.1.1.jar tệp vào biến môi trường CLASSPATH.
Ánh xạ giữa các thực thể JSON và Java
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 .
Mã hóa JSON trong Java
Dưới đây là một ví dụ đơn giản để mã hóa một đối tượng JSON bằng cách sử dụng Java JSONObject, một lớp con của java.util.HashMap. Không có thứ tự được cung cấp. Nếu bạn cần thứ tự nghiêm ngặt của các phần tử, hãy sử dụng phương thức JSONValue.toJSONString (bản đồ) với việc triển khai bản đồ có thứ tự như java.util.LinkedHashMap.
import org.json.simple.JSONObject;
class JsonEncodeDemo {
public static void main(String[] args) {
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));
System.out.print(obj);
}
}
Khi biên dịch và thực hiện chương trình trên, kết quả sau sẽ được tạo ra:
{"balance": 1000.21, "num":100, "is_vip":true, "name":"foo"}
Sau đây là một ví dụ khác cho thấy luồng đối tượng JSON sử dụng Java JSONObject:
import org.json.simple.JSONObject;
class JsonEncodeDemo {
public static void main(String[] args) {
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));
StringWriter out = new StringWriter();
obj.writeJSONString(out);
String jsonText = out.toString();
System.out.print(jsonText);
}
}
Khi biên dịch và thực thi chương trình trên, kết quả sau được tạo ra:
{"balance": 1000.21, "num":100, "is_vip":true, "name":"foo"}
Giải mã JSON trong Java
Ví dụ sau sử dụng JSONObject và JSONArray trong đó JSONObject là java.util.Map và JSONArray là java.util.List, vì vậy bạn có thể truy cập chúng bằng các hoạt động tiêu chuẩn của Bản đồ hoặc Danh sách.
import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.parser.ParseException;
import org.json.simple.parser.JSONParser;
class JsonDecodeDemo {
public static void main(String[] args) {
JSONParser parser = new JSONParser();
String s = "[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]";
try{
Object obj = parser.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 = parser.parse(s);
System.out.println(obj);
s = "[5,]";
obj = parser.parse(s);
System.out.println(obj);
s = "[5,,2]";
obj = parser.parse(s);
System.out.println(obj);
}catch(ParseException pe) {
System.out.println("position: " + pe.getPosition());
System.out.println(pe);
}
}
}
Khi biên dịch và thực hiện chương trình trên, kết quả sau sẽ được tạo ra:
The 2nd element of array
{"1":{"2":{"3":{"4":[5,{"6":7}]}}}}
Field "1"
{"2":{"3":{"4":[5,{"6":7}]}}}
{}
[5]
[5,2]