結合json.org與Gson並支援XML的MagicLenJSON(Mson)


JSON(JavaScript Object Notation)為一種數據交換結構,相比XMLJSON的語法顯得更為輕巧,大大地減少數據交換時所要傳遞的資料量。在Java語言裡,有許多根據JSON數據交換標準實作出來的Library,json.org和Gson就是其中的兩種。

json.org

Gson

json.org和Gson的差異

json.org和Gson雖都能夠完整處理JSON資料,但在實際撰寫程式的時候,兩者的用法卻不太相同。舉例來說:若要撈出JSON物件(JSONObject)內所有的Key,json.org的函式庫可以直接使用keySet()方法得到key的set(方法類似Java Collections的HashMap),然後再使用for-each或是iterator去走訪set裡所有的key。但是在Gson中,需要使用entrySet()取得所有entry的set,再用for-each或是iterator去走訪set裡所有的entry,然後用entry的getKey()方法來取得entry的key。筆者比較喜歡json.org的作法,因為少了一層entry,做起來稍微容易。若要key值所對應的value,可以用JSON物件的get方法。Gson取出的entry雖可以直接取得JsonElement,若要使用還要先去轉換型態,個人覺得沒有比較好用,所以通常還是會拿key透過get方法取出值。

Gson提供了一個方便的功能,它能夠將Java物件轉換成JSON字串或是JSON的物件或陣列,也可以將JSON字串或是JSON的物件或陣列轉回Java物件。若有個class結構如下:

透過Gson可以將這個A類別產生出的物件實體轉換成JSON字串如下:

若使用json.org的函式庫,則沒有提供類似的功能,只能夠用put的方法慢慢將key和value插入進JSON物件內。

MagicLen JSON(Mson)

由於筆者習慣使用json.org的函式庫,又想要擁有Gson的功能,因此決定將json.org和Gson結合,創造出Mson。使用Mson可以將Java物件轉換成json.org的JSON物件或陣列,也可以將json.org的JSON物件或陣列轉回Java物件。而且比起Gson所提供的轉換功能,Mson更為簡易,而且層數更少。同時,Mson還支援一次將多種Java不同的物件轉成JSON陣列,當然也能將此包含不同Java物件的JSON陣列,轉回Java物件的陣列(Object[])。Gson採用固定型態的轉換,而Mson則採用優先型態的轉換,使用者可以自訂要嘗試轉換成的物件類別,故使用起來Mson會比Gson更為自由、簡單。

除此之外,Mson還可以使用toString(json, true)方法來產生出整齊的JSON結構字串,結果如下:

也可以使用toXML或是fromXML方法將JSON轉成XML,或是將XML轉成JSON哦!

MagicLenJSON的原始碼、函式庫和文件可以在Github上取得,網址如下:

https://github.com/magiclen/MagicLenJSON

本站下載MagicLenJSON

關於作者

Magic Len

各位好,我是Magic Len,是這網站的管理員。我是台灣台中大肚山上人,畢業於台中高工資訊科和台灣科技大學資訊工程系,曾在桃機航警局服役。我熱愛自然也熱愛科學,喜歡和別人分享自己的知識與經驗。如果你有興趣認識我,可以加我的Facebook,並且請註明是從MagicLen來的。

相關文章