標籤:
6.1 JSON 知識背景6.1.1 JSON 簡介
JSON: JavaScript Object Notation(JavaScript 對象標記法)
JSON 是儲存和交換文本資訊的文法。類似 XML。
JSON 比 XML 更小、更快,更易解析。
JSON 使用 Javascript文法來描述資料對象,但是 JSON 仍然獨立於語言和平台。JSON 解析器和 JSON 庫支援許多不同的程式設計語言。 目前非常多的動態(PHP,JSP,.NET)程式設計語言都支援JSON。
6.1.2 JSON 文法 JSON 文法規則
- 資料在名稱/值對中
- 資料由逗號分隔
- 花括弧儲存對象
- 方括弧儲存數組
JSON 名稱/值對
JSON 資料的書寫格式是:名稱/值對。
名稱/值對包括欄位名稱(在雙引號中),後面寫一個冒號,然後是值:
這很容易理解,等價於這條 JavaScript 語句:
JSON 實值型別
JSON 值可以是:
- 字串(在雙引號中)
- 數字(整數或浮點數)
- 對象(在花括弧中)
- 數組(在方括弧中)
- 邏輯值(true 或 false)
- Null
值的資料類型圖:
6.1.3 JSON 的資料結構
JSON有兩種資料結構:對象和數組。
JSON 對象
對象是一個無序的“‘名稱/值’對”集合(A collection of name/value pairs)。不同的語言中,它被理解為對象(object),紀錄(record),結構(struct),字典(dictionary),雜湊表(hash table),有鍵列表(keyed list),或者關聯陣列 (associative array)。
一個對象以“{”(左括弧)開始,“}”(右括弧)結束。每個“名稱”後跟一個“:”(冒號);“‘名稱/值’ 對”之間使用“,”(逗號)分隔。
JSON 對象在花括弧中書寫:
| { "name":"zhangsan" , "age":24 } |
這一點也容易理解,與這條 JavaScript 語句等價:
| name = "zhangsan" age = 24 |
參考圖如下:
JSON 數組
值的有序列表(An ordered list of values)。在大部分語言中,它被理解為數組(array)。
JSON 數組在方括弧中書寫:
數組可包含多個對象:
| { "people": [ { "namr":"zhangsan" , "age":22 }, { "name":"lisi" , "age":24 }, { "name":"wangwu" , "age":27 } ] } |
在上面的例子中,對象 "employees" 是包含三個對象的數組。每個對象代表一條關於某人(有姓和名)的記錄。
參考圖如下:
6.2 Java 中操作 JSON 資料
網上有很多JAVA種操作JSON的jar包,這裡介紹一個最常見的jar包:json-lib。
6.2.1 Jar包下載
:http://json-lib.sourceforge.net/
6.2.2 基本方法 普通資料轉 JSONObject /**
* 普通資料轉 JSON
*/
public static void JsonTest1() {
JSONObject normalJson = new JSONObject();
normalJson.put("name", "zhangsan");
normalJson.put("sex", "男");
normalJson.put("age", new Integer(22));
System.out.println(normalJson.toString());
}
Map資料轉 JSON /**
* Map資料轉 JSON
*/
public static void JsonTest2() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "zhangsan"); // string 類型
map.put("age", new Integer(22)); // number 類型
Object obj = new String("params");
map.put("obj", obj); // Object 類型
map.put("array", new String[] { "a", "b", "c" }); // array 類型
map.put("b_true", Boolean.TRUE); // boolean 類型
map.put("b_false", Boolean.FALSE); // boolean 類型
JSONObject json = JSONObject.fromObject(map);
System.out.println(json.toString());
}
List 資料轉 JSON /**
* List資料轉 JSON
*/
public static void JsonTest3() {
List<String> list = new ArrayList<String>();
list.add("first");
list.add("second");
JSONArray jsonArray = JSONArray.fromObject(list);
System.out.print(jsonArray);
}
數組資料轉 JSON /**
* 數組資料轉 JSON
*/
public static void JsonTest4() {
String[] colors = new String[]{ "red", "yellow", "blue" };
JSONArray jsonArray = JSONArray.fromObject(colors);
System.out.println(jsonArray);
}
構建 JSON 文本
JSONStringer可以用來快速構建一個JSON格式的文本,並轉換成String,可以寫入檔案;
JSONStringer是JSONWriter的子類;
JSONStringer一般通過object().key().value().key().value().endObject()進行構造;
object() 表明開始一個對象,即添加‘{‘;
endObject() 表明結束一個對象,即添加‘}‘;
array() 表明開始一個數組,即添加一個‘[‘;
endArray() 表明結束一個數組,即添加一個‘]‘;
key() 表示添加一個key;
value() 表示添加一個value;
/**
* 構建 JSON 文本
*/
public static void JsonTest5() {
JSONStringer stringer = new JSONStringer();
String str = stringer.object().key("product").value("phone").key("num").value(20).endObject().toString();
System.out.println(str);
}
參考資料
http://www.json.org/
http://www.runoob.com/json/json-tutorial.html
[Java IO]06_JSON操作