使用 GSON 處理 Java 中的 JSON

JSON

什麼是 JSON? 查一下 Wiki JSON 看看。簡單的說 JSON 的全名是JavaScript Object Notation,用途是資料交換。在這之前會用 XML 來做資料交換,可是當資料量很多時,XML 檔會很肥大,而 JSON 是輕量級的資料交換格式,著重在檔案小速度快。
既然稱做 Object Notation ,就是利用 JavaScritp 的物件格式來儲存資料,而物件是以左大括號{開始,右大括號}結束。並以key:value的方式來儲存資料,多組 key-value 則以逗號,分開,看起來就會是這樣:
{
  "name":"Tom", 
  "age":50, 
  "male":true, 
  "address":null
}
key是一個字串;value則可以是字串、數值、物件、布林值、有序列表(Array),或null。

Array的表示方式為,使用左中括號[開始,以右中括號]結束,每個值以逗號,分隔。看起來會這樣:
{
  "phone":[
    "04-2345678", 
    "0916123456"
  ]
}
更詳細的用法可以上 JSON 官網

使用 GSON

你可以在 JSON 官網看到 JSON 的 Java 實作版本有好多種,其中一個就是 Google 的版本 GSON。可以查詢GSON-API,及使用手冊(User Guide)。

這裡練習如何讓一個 Java 中的物件對 JSON 格式互相轉換。

假設我們有一個書籍類別 Book.java:
public class Book {
   private String isbn;
   private String name;
   private int price;

   public String getIsbn() {
     return isbn;
   }
   public void setIsbn(String isbn) {
     this.isbn = isbn;
   }
   public String getName() {
     return name;
   }
   public void setName(String name) {
     this.name = name;
   }
   public int getPrice() {
     return price;
   }
   public void setPrice(int price) {
     this.price = price;
   }
   public Book(String _isbn, String _name, int _price) {
     isbn = _isbn;
     name = _name;
     price = _price;
   }
}
我們可以將它轉換成 JSON 物件,Jsondemo.java:
public static void main(String[] args) {
  //======= Object to JSON =======
  //建立Book物件
  Book book = new Book("956-987236-1", "Java歷險記", 550);
  //建立GSON物件
  Gson gson = new Gson();
  //將Book物件轉成JSON
  String json = gson.toJson(book);
  //把JSON格式的資料秀出來
  System.out.println(json);
  //輸出結果:{"isbn":"956-987236-1","name":"Java歷險記","price":550}

  //======== JSON to Object ========
  //將JSON格式的資料轉成物件
  Book jbook = gson.fromJson(json, Book.class);
  System.out.println(jbook.getIsbn());
  System.out.println(jbook.getName());
  System.out.println(jbook.getPrice());
}

總結

XML 仍是比 JSON 對於資料的描述較為嚴謹,但如果僅是做為資料傳遞的用途,以 JSON 格式來儲存,檔案會比較小,解析速度也比 XML 快。

其他 JSON 實作還沒用過,選擇 GSON 只是國外討論區上的推薦,而 GSON 的文件也寫得很清楚,還滿容易上手的。
本文網址:http://blog.tonycube.com/2012/03/gsonjavajson.html
Tony Blog 撰寫,轉載時請註明出處及文章連結,謝謝 😀

2 則留言

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。