[Java IO]06_JSON操做

6.1 JSON 知識背景編程

6.1.1 JSON 簡介

JSON: JavaScript Object Notation(JavaScript 對象表示法)json

JSON 是存儲和交換文本信息的語法。相似 XML。數組

JSON 比 XML 更小、更快,更易解析。數據結構

JSON 使用 Javascript語法來描述數據對象,可是 JSON 仍然獨立於語言和平臺。JSON 解析器和 JSON 庫支持許多不一樣的編程語言。 目前很是多的動態(PHP,JSP,.NET)編程語言都支持JSON。編程語言

 

6.1.2 JSON 語法

JSON 語法規則

  • 數據在名稱/值對中
  • 數據由逗號分隔
  • 花括號保存對象
  • 方括號保存數組

 

JSON 名稱/值對

JSON 數據的書寫格式是:名稱/值對。spa

名稱/值對包括字段名稱(在雙引號中),後面寫一個冒號,而後是值:.net

「name」 : 「zhangsan」code

這很容易理解,等價於這條 JavaScript 語句:orm

Name = 「zhangsan」對象

 

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);  }
相關文章
相關標籤/搜索