java鏈式創建json對象的實現
我們主要介紹一下:java中如何通過最簡單的方式實現鏈式創建json對象,解決創建json代碼臃腫的問題。
1、假設我們要創建一個json對象格式如下:
{ "code": 0, "msg": "SUCCESS" }
2、往常創建JSON語法:
java中傳統的創建json一般采用如下形式,先來看一個例子:
JSONObject res = new JSONObject(); res.put("code",0); res.put("msg","SUCCESS");
這個例子中,每往json中加入一個元素都需要寫一遍res.put,每行隻能創建一個json的數據,這樣比較繁瑣,代碼也很臃腫,是不是覺得很不科學。
如果你覺得這還能接受,那麼你不妨試試二級json,三級json,完整的寫下來,你的代碼能有幾十行是毫不誇張的。
3、解決方案——鏈式創建JSON:
我們可以采用鏈式創建JSON的方法,例如下面例子:
JSONObject res1 = new YtJSONObject().put("code",0).put("msg","SUCCESS").getHome();
通過以上例子中,我們實現瞭鏈式創建JSON,每往JSON中加入一個元素,隻需要在鏈式寫法(也稱鏈條語法)中寫.put接上新元素即可。
這樣我們就實現瞭鏈式創建JSON,好處是免去每次都寫res.put的煩惱,創建一個完整的JSON對象隻需要一行代碼即可,這樣代碼就整潔清晰瞭很多。
以上例子中我們用到瞭一個類:YtJSONObject,這個類是將JSONObject類再次封裝的一個加強類,通過.put元素鏈條寫完後,最終采用.getHome獲取得到JSONObject類對象,從而實現JSON的鏈式寫法。
如需獲取JSON字符串,我們隻需要使用JSONObject對象原有的方法,例如:
String str = new YtJSONObject().put("code",0).put("msg","SUCCESS").getHome().toString();
這裡的.getHome()方法就是真正獲取到瞭JSONObject類對象,同時也就支持瞭JSONObject類對象的一切方法,所以可以調用.toString()轉為json字符串。
4、實現多級JSON
很多時候我們的json都不是一級的,還會有二級、三級、無數級,此時使用傳統的json聲明語法隻會時代碼越來越多,作用卻不大。
使用鏈式json如何實現呢,我們來看個例子:
JSONObject res2 = new YtJSONObject() .put("code",0) .put("msg","SUCCESS") .put("result", new YtJSONObject() .put("id",1) .put("url","a") ) .getHome();
以上例子中我們實現瞭一個二級JSON,就是增加瞭一個result級別的json,直接在賦值的地方繼續new YtJSONObject對象,然後繼續向下使用鏈式寫法即可,如果你還需要三級JSON甚至多級JSON也是同理。
為瞭讓語法看起來更加清晰,我把鏈式寫法格式化瞭一下,更容易看清楚,實際應用中不太長的JSON鏈式寫法完全可以寫在一行上。
5、YtJSONObject類源碼
import com.alibaba.fastjson.JSONObject; public class YtJSONObject { private JSONObject home; public YtJSONObject() { this.home = new JSONObject(); } public YtJSONObject put(String key, Object value) { home.put(key, value); return this; } public JSONObject getHome() { return home; } }
該類隻是增強瞭JSONObject類,使JSONObject類支持鏈式語法,並不是自行創建瞭一種JSON類類型,因此使用時還需要在pom.xml中引入一下fastjson
到此這篇關於java鏈式創建json對象的文章就介紹到這瞭,更多相關java鏈式創建json對象內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java使用fastjson對String、JSONObject、JSONArray相互轉換
- 如何修改JSON字符串中的敏感信息
- java解析多層嵌套json字符串問題
- java fastjson傳輸long數據卻接收到瞭int的問題
- 利用JSONObject.toJSONString()包含或排除指定的屬性