org.json.simple使用詳解
阿新 • • 發佈:2019-01-21
一、概覽
JSON.simple是一個很簡單的JSON處理,讀取和寫JSON資料的JAVA庫,它完全相容JSON的標準(RFC4627).
你可以用JSON.simple來編碼或解碼JSON文字。
【NOTE】
如果想將物件轉換成JOSN,或將JSON轉換成物件,你需要考慮使用Jackson或Gson。
二、功能
JSON.simple的功能:. 完全相容JSON的標準(RFC4627)
. 提供了多個功能,如編碼;
. 使用輕量級的庫來解碼/解析和轉換JSON文字
. 靈活,簡單並且易於被Map和List介面重用;
. 支援流式的JSON文字輸出;
. 提供了對於JSON文字流式輸入的可停止的SAX-like介面;
. 基於解析器的頭;
. 高效能;
. 不依賴其它的庫;
. 所有的程式碼和執行檔案都和JDK 1.2相容
JSON和Java 例項的對映關係:
|__JSON_______|______Java_________________|
string java.lang.String
number java.lang.Number
true|false java.lang.Boolean
null null
array java.util.List
object java.util.Map
在解碼或解析時,JSON.simple的對映是從左邊對映到右邊;
在編碼時,對映關係是從右邊到左邊;
在解碼時,
預設具體的java.util.List類對應的是 org.json.simple.JSONArray;
預設具體的java.util.Map類對應的是 org.json.simple.JSONObject;
在編碼時,
沒有列在表右邊的類需要實現JSONAware或JSONStreamAware(僅用於流)來實現定製化的JSON輸出;
在這種情況下,JSON.simple呼叫JSONAware.toJSONString()或 JSONStreamAware.writeJSONString()
來確定JSON文字的結果;
三、JSON.simple 新增到Maven的pom.xml
JSON.simple is available at Maven central repository, just declares following dependency in your pom.xml file.<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1</version>
</dependency>
四、 JSON編碼示例
4.1 編碼成JSON物件
1. Example 1-1 -編碼成一個JSON物件
//import org.json.simple.JSONObject;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("nickname",null);
System.out.print(obj);
Result: {"balance":1000.21,"num":100,"nickname":null,"is_vip":true,"name":"foo"}
JSONObject is subclass of java.util.HashMap. No ordering is provided.
If you need strict ordering of elements use JSONValue.toJSONString( map )
method with ordered map implementation such as java.util.LinkedHashMap (see example 1-3).
Please refer Mapping Between JSON and Java Entities for more information.
JSONObject是Java.util.HashMap的子類,不提供排序。
如果你需要強制對元素進行排序,可以使用JSONValue.toJSONString(map)方法來實現。
2. Example 1-2 - Encode a JSON object - Streaming
//import org.json.simple.JSONObject;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("nickname",null);
StringWriter out = new StringWriter();
obj.writeJSONString(out);
String jsonText = out.toString();
System.out.print(jsonText);
Result: {"balance":1000.21,"num":100,"nickname":null,"is_vip":true,"name":"foo"}
JSONObject is subclass of java.util.HashMap. No ordering is provided.
If you need strict ordering of elements use JSONValue.toJSONString( map )
method with ordered map implementation such as java.util.LinkedHashMap (see example 1-3).
Please refer Mapping Between JSON and Java Entities for more information.
3. Example 1-3 - Encode a JSON object - Using Map
//import java.util.LinkedHashMap;//import java.util.Map;
//import org.json.simple.JSONValue;
Map obj=new LinkedHashMap();
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("nickname",null);
String jsonText = JSONValue.toJSONString(obj);
System.out.print(jsonText);
Result: {"name":"foo","num":100,"balance":1000.21,"is_vip":true,"nickname":null}
Now the order of the object entries is preserved, which is different from example 1-1.
Please refer Mapping Between JSON and Java Entities for more information.
4. Example 1-4 - Encode a JSON object - Using Map and streaming
//import java.util.LinkedHashMap;//import java.util.Map;
//import org.json.simple.JSONValue;
Map obj=new LinkedHashMap();
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("nickname",null);
StringWriter out = new StringWriter();
JSONValue.writeJSONString(obj, out);
String jsonText = out.toString();
System.out.print(jsonText);
Result: {"name":"foo","num":100,"balance":1000.21,"is_vip":true,"nickname":null}
Please refer Mapping Between JSON and Java Entities for more information.
4.2 編碼成JSON陣列
1. Example 2-1 - Encode a JSON array
//import org.json.simple.JSONArray;JSONArray list = new JSONArray();
list.add("foo");
list.add(new Integer(100));
list.add(new Double(1000.21));
list.add(new Boolean(true));
list.add(null);
System.out.print(list);
Result: ["foo",100,1000.21,true,null]
2. Example 2-2 - Encode a JSON array - Streaming
//import org.json.simple.JSONArray;JSONArray list = new JSONArray();
list.add("foo");
list.add(new Integer(100));
list.add(new Double(1000.21));
list.add(new Boolean(true));
list.add(null);
StringWriter out = new StringWriter();
list.writeJSONString(out);
String jsonText = out.toString();
System.out.print(jsonText);
Result: ["foo",100,1000.21,true,null]
Please refer Mapping Between JSON and Java Entities for more information.
3. Example 2-3 - Encode a JSON array - Using List
//import org.json.simple.JSONValue;LinkedList list = new LinkedList();
list.add("foo");
list.add(new Integer(100));
list.add(new Double(1000.21));
list.add(new Boolean(true));
list.add(null);
String jsonText = JSONValue.toJSONString(list);
System.out.print(jsonText);
Result: ["foo",100,1000.21,true,null]
Please refer Mapping Between JSON and Java Entities for more information.
4. Example 2-4 - Encode a JSON array - Using List and streaming
//import org.json.simple.JSONValue;LinkedList list = new LinkedList();
list.add("foo");
list.add(new Integer(100));
list.add(new Double(1000.21));
list.add(new Boolean(true));
list.add(null);
StringWriter out = new StringWriter();
JSONValue.writeJSONString(list, out);
String jsonText = out.toString();
System.out.print(jsonText);
Result: ["foo",100,1000.21,true,null]
Please refer Mapping Between JSON and Java Entities for more information.
4.3 合併兩個JSON物件
Example 3 - Merge two JSON objects
//import org.json.simple.JSONObject;JSONObject obj1 = new JSONObject();
obj1.put("name","foo");
obj1.put("num",new Integer(100));
obj1.put("balance",new Double(1000.21));
JSONObject obj2 = new JSONObject();
obj2.put("is_vip",new Boolean(true));
obj2.put("nickname",null);
obj2.putAll(obj1);
System.out.print(obj2);
Result: {"balance":1000.21,"num":100,"nickname":null,"is_vip":true,"name":"foo"},
the same as the one of Example 1.
4.4 合併兩個JSON陣列
Example 4 - Merge two JSON arrays
JSONArray list1 = new JSONArray();list1.add("foo");
list1.add(new Integer(100));
list1.add(new Double(1000.21));
JSONArray list2 = new JSONArray();
list2.add(new Boolean(true));
list2.add(null);
list2.addAll(list1);
System.out.print(list2);
Result: [true,null,"foo",100,1000.21], the order of which is different from the one of Example 2.
4.5 原始JSON聯結
Example 5-1 - Combination of JSON primitives, JSON object and JSON arrays
JSONArray list1 = new JSONArray();list1.add("foo");
list1.add(new Integer(100));
list1.add(new Double(1000.21));
JSONArray list2 = new JSONArray();
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("nickname",null);
obj.put("list1", list1);
obj.put("list2", list2);
System.out.println(obj);
Result: {"balance":1000.21,"list2":[true,null],"num":100,"list1":["foo",100,1000.21],"nickname":null,"is_vip":true,"name":"foo"}
Example 5-2 - Combination of JSON primitives, Map and List
Map m1 = new LinkedHashMap();Map m2 = new HashMap();
List l1 = new LinkedList();
m1.put("k11","v11");
m1.put("k12","v12");
m1.put("k13", "v13");
m2.put("k21","v21");
m2.put("k22","v22");
m2.put("k23","v23");
l1.add(m1);
l1.add(m2);
String jsonString = JSONValue.toJSONString(l1);
System.out.println(jsonString);
Result: [{"k11":"v11","k12":"v12","k13":"v13"},{"k22":"v22","k21":"v21","k23":"v23"}]
Example 5-3 - Combination of JSON primitives, JSONObject, Map and List, and streaming
StringWriter out = new StringWriter();JSONObject obj = new JSONObject();
LinkedHashMap m1 = new LinkedHashMap();
LinkedList l1 = new LinkedList();
obj.put("k1", "v1");
obj.put("k2", m1);
obj.put("k3", l1);
m1.put("mk1", "mv1");
l1.add("lv1");
l1.add("lv2");
m1.put("mk2", l1);
obj.writeJSONString(out);
System.out.println("jsonString:");
System.out.println(out.toString());
String jsonString = obj.toJSONString();
System.out.println(jsonString);
Result:
jsonString:
{"k3":["lv1","lv2"],"k1":"v1","k2":{"mk1":"mv1","mk2":["lv1","lv2"]}}
{"k3":["lv1","lv2"],"k1":"v1","k2":{"mk1":"mv1","mk2":["lv1","lv2"]}}
4.6 定製化的JSON輸出
Example 6-1 - Customize JSON outputs
/*class User implements JSONAware{private int id;
private String name;
private String password;
public User(int id, String name, String password){