Search

Java - JSON 資料解析基本教學

2015-11-19 1:53 PM

JSON 算是目前主流的資料交換格式

跟 XML 比較起來 JSON的優點就是檔案小很多

但可讀性卻一點也不輸給 XML(這裡的可讀性是指"人")

以下就來簡單介紹 JSON 格式 以及如何解析資料

將 JSON 字串轉為物件 或是將物件轉換為 JSON 字串

在這裡會用到 Google 維護的 Gson Library

程式碼範例
// 陣列表達
[string1, string2, string3]

// 物件表達
{key1 : value1, key2 : value2, key3 : value3}

// 基本JSON表達式
{
  "id": 1,
  "name": "Hello JSON",
  "friends": [
    {
      "id": 2,
      "name": "Hello JAVA",
    },
    {
      "id": 3,
      "name": "Hello Andoird",
    }
  ],
  "certified": true
}

// 將 JSON 字串轉換為物件
return new GsonBuilder()
            // 若不須將日期自動轉換為 Date 物件則不須加入 setDateFormat 方法
            .setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
            .create()
            // json 為 JSON字串, YourJsonObject.class 就是要轉換為的物件類型
            .fromJson(json, YourJsonObject.class);

// 若物件內的名稱與 JSON 內的名稱有些許差異時
// 可以用 @SerializedName("field_name") 指定
@SerializedName("issued_at")
private String fieldName;

// 若想轉換為 Map 格式 可使用以下方式 
Type t = new TypeToken<Map<String,Machine>>() {}.getType();
Map<String,Machine> map = (Map<String,Machine>) new Gson().fromJson("json", t);

// 若 JSON 內容最外層為陣列 而想轉換為 List 時可使用以下方式
Type t = new TypeToken<List<SearchResult>>() {}.getType();
List<SearchResult> list = (List<SearchResult>) new Gson().fromJson("json", t);

// 將物件轉為 JSON 格式字串
return new GsonBuilder()
            // 指定 Gson 不預先 escape html 的某些字元(如 "<", ">")
            .disableHtmlEscaping()
            .create()
            .toJson(this);
各項資料連結
Android - HttpURLConnection 基本教學 取得網頁資料(HTML, XML, JSON)
Android - 使用 HttpURLConnection 自動轉址失效的解決方式
google/gson - GitHub
JSON - MDN

No comments:

Post a Comment