java鏈?zhǔn)絼?chuàng)建json對(duì)象的實(shí)現(xiàn)
我們主要介紹一下:java中如何通過(guò)最簡(jiǎn)單的方式實(shí)現(xiàn)鏈?zhǔn)絼?chuàng)建json對(duì)象,解決創(chuàng)建json代碼臃腫的問(wèn)題。
1、假設(shè)我們要?jiǎng)?chuàng)建一個(gè)json對(duì)象格式如下:
{ "code": 0, "msg": "SUCCESS" }
2、往常創(chuàng)建JSON語(yǔ)法:
java中傳統(tǒng)的創(chuàng)建json一般采用如下形式,先來(lái)看一個(gè)例子:
JSONObject res = new JSONObject(); res.put("code",0); res.put("msg","SUCCESS");
這個(gè)例子中,每往json中加入一個(gè)元素都需要寫(xiě)一遍res.put,每行只能創(chuàng)建一個(gè)json的數(shù)據(jù),這樣比較繁瑣,代碼也很臃腫,是不是覺(jué)得很不科學(xué)。
如果你覺(jué)得這還能接受,那么你不妨試試二級(jí)json,三級(jí)json,完整的寫(xiě)下來(lái),你的代碼能有幾十行是毫不夸張的。
3、解決方案——鏈?zhǔn)絼?chuàng)建JSON:
我們可以采用鏈?zhǔn)絼?chuàng)建JSON的方法,例如下面例子:
JSONObject res1 = new YtJSONObject().put("code",0).put("msg","SUCCESS").getHome();
通過(guò)以上例子中,我們實(shí)現(xiàn)了鏈?zhǔn)絼?chuàng)建JSON,每往JSON中加入一個(gè)元素,只需要在鏈?zhǔn)綄?xiě)法(也稱(chēng)鏈條語(yǔ)法)中寫(xiě).put接上新元素即可。
這樣我們就實(shí)現(xiàn)了鏈?zhǔn)絼?chuàng)建JSON,好處是免去每次都寫(xiě)res.put的煩惱,創(chuàng)建一個(gè)完整的JSON對(duì)象只需要一行代碼即可,這樣代碼就整潔清晰了很多。
以上例子中我們用到了一個(gè)類(lèi):YtJSONObject,這個(gè)類(lèi)是將JSONObject類(lèi)再次封裝的一個(gè)加強(qiáng)類(lèi),通過(guò).put元素鏈條寫(xiě)完后,最終采用.getHome獲取得到JSONObject類(lèi)對(duì)象,從而實(shí)現(xiàn)JSON的鏈?zhǔn)綄?xiě)法。
如需獲取JSON字符串,我們只需要使用JSONObject對(duì)象原有的方法,例如:
String str = new YtJSONObject().put("code",0).put("msg","SUCCESS").getHome().toString();
這里的.getHome()方法就是真正獲取到了JSONObject類(lèi)對(duì)象,同時(shí)也就支持了JSONObject類(lèi)對(duì)象的一切方法,所以可以調(diào)用.toString()轉(zhuǎn)為json字符串。
4、實(shí)現(xiàn)多級(jí)JSON
很多時(shí)候我們的json都不是一級(jí)的,還會(huì)有二級(jí)、三級(jí)、無(wú)數(shù)級(jí),此時(shí)使用傳統(tǒng)的json聲明語(yǔ)法只會(huì)時(shí)代碼越來(lái)越多,作用卻不大。
使用鏈?zhǔn)絡(luò)son如何實(shí)現(xiàn)呢,我們來(lái)看個(gè)例子:
JSONObject res2 = new YtJSONObject() .put("code",0) .put("msg","SUCCESS") .put("result", new YtJSONObject() .put("id",1) .put("url","a") ) .getHome();
以上例子中我們實(shí)現(xiàn)了一個(gè)二級(jí)JSON,就是增加了一個(gè)result級(jí)別的json,直接在賦值的地方繼續(xù)new YtJSONObject對(duì)象,然后繼續(xù)向下使用鏈?zhǔn)綄?xiě)法即可,如果你還需要三級(jí)JSON甚至多級(jí)JSON也是同理。
為了讓語(yǔ)法看起來(lái)更加清晰,我把鏈?zhǔn)綄?xiě)法格式化了一下,更容易看清楚,實(shí)際應(yīng)用中不太長(zhǎng)的JSON鏈?zhǔn)綄?xiě)法完全可以寫(xiě)在一行上。
5、YtJSONObject類(lèi)源碼
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; } }
該類(lèi)只是增強(qiáng)了JSONObject類(lèi),使JSONObject類(lèi)支持鏈?zhǔn)秸Z(yǔ)法,并不是自行創(chuàng)建了一種JSON類(lèi)類(lèi)型,因此使用時(shí)還需要在pom.xml中引入一下fastjson
到此這篇關(guān)于java鏈?zhǔn)絼?chuàng)建json對(duì)象的文章就介紹到這了,更多相關(guān)java鏈?zhǔn)絼?chuàng)建json對(duì)象內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- JS創(chuàng)建對(duì)象常用設(shè)計(jì)模式工廠構(gòu)造函數(shù)及原型
- JS對(duì)象創(chuàng)建與繼承的匯總梳理
- JS創(chuàng)建對(duì)象的四種方式
- JavaScript函數(shù)this指向問(wèn)題詳解
- 詳解JavaScript原型對(duì)象的this指向問(wèn)題
- JavaScript 中this指向問(wèn)題案例詳解
- JavaScript函數(shù)中this指向問(wèn)題詳解
- JavaScript中的this指向問(wèn)題詳解
- JavaScript創(chuàng)建對(duì)象的幾種方式及關(guān)于this指向問(wèn)題
相關(guān)文章
SpringBoot項(xiàng)目中使用Swagger2及注解解釋的詳細(xì)教程
Swagger2是一個(gè)開(kāi)源項(xiàng)目,用于為RESTful Web服務(wù)生成REST API文檔,下面這篇文章主要給大家介紹了關(guān)于SpringBoot項(xiàng)目中使用Swagger2及注解解釋的詳細(xì)教程,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04idea構(gòu)建web項(xiàng)目的超級(jí)詳細(xì)教程
好多朋友在使用IDEA創(chuàng)建項(xiàng)目時(shí),總會(huì)碰到一些小問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于idea構(gòu)建web項(xiàng)目的超級(jí)詳細(xì)教程,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03解決spring boot2集成activiti6踩過(guò)的坑
這篇文章主要介紹了解決spring boot2集成activiti6踩過(guò)的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09SpringBoot使用WebSocket實(shí)現(xiàn)前后端交互的操作方法
springboot使用websocket有兩種方式,一種是實(shí)現(xiàn)簡(jiǎn)單的websocket,另外一種是實(shí)現(xiàn)STOMP協(xié)議,本篇講述如何使用springboot實(shí)現(xiàn)簡(jiǎn)單的websocket,需要的朋友可以參考下2022-04-04基于MybatisPlus插件TenantLineInnerInterceptor實(shí)現(xiàn)多租戶功能
這篇文章主要介紹了基于MybatisPlus插件TenantLineInnerInterceptor實(shí)現(xiàn)多租戶功能,需要的朋友可以參考下2021-11-11使用springboot單例模式與線程安全問(wèn)題踩的坑
這篇文章主要介紹了使用springboot單例模式與線程安全問(wèn)題踩的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Mybatis實(shí)現(xiàn)數(shù)據(jù)的增刪改查實(shí)例(CRUD)
本篇文章主要介紹了Mybatis實(shí)現(xiàn)數(shù)據(jù)的增刪改查實(shí)例(CRUD),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05Mybatis報(bào)錯(cuò)日志BindingException的解決
本文主要介紹了Mybatis報(bào)錯(cuò)日志BindingException的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07使用springboot訪問(wèn)圖片本地路徑并映射成url
這篇文章主要介紹了使用springboot訪問(wèn)圖片本地路徑并映射成url的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08