日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JsonBuilder初出茅庐

發(fā)布時(shí)間:2023/12/13 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JsonBuilder初出茅庐 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  互聯(lián)網(wǎng)這股東風(fēng)不久前刮到了甘涼國,國王老甘獨(dú)具慧眼,想趕緊趁著東風(fēng)未停大力發(fā)展移動(dòng)互聯(lián)網(wǎng),因?yàn)樗V信布斯雷的理論:“站在風(fēng)口上,豬都能飛起來”。無奈地方偏僻落后,國內(nèi)無可用之才啊。老甘一籌莫展的低頭凝思應(yīng)聲被打斷,“啟奏陛下,有四個(gè)從東土大唐來的和尚前來更換通關(guān)文牒”,聽到“東土大唐”四個(gè)字,老甘心頭一喜,答道:“請他們?nèi)フ玫群颉薄?/p>

唐僧:貧僧唐三藏,自東土大唐而來,前往西天拜佛求經(jīng),今途徑貴國,懇請陛下更換通關(guān)文牒。
國王:高僧從東方而來,想必對互聯(lián)網(wǎng)略知一二。
唐僧:貧僧也是略有耳聞,不過我的徒兒對此頗有研究。
國王:寡人現(xiàn)有一需求,還請高僧幫忙處理一下,事成之后,定放你們西行。需求文檔一會(huì)發(fā)你。
唐僧:遵命,謝陛下。
國王:(發(fā)文檔),@三藏。
唐僧:收到。
唐僧:@悟凈,處理下文檔中的需求。
沙僧:收到。

  對接接口繁瑣復(fù)雜,還要多方聯(lián)調(diào)。悟空雖然水平高,但是脾氣不好,怕打起來;八戒好吃懶惰,恐難當(dāng)此任;悟凈,為師只有辛苦你了。唐僧心里想到此,不由得嘆氣一聲。

沙僧:師傅,這文檔寫的亂七八糟、語句不通,很多入?yún)ⅰ⒊鰠⒛:磺?#xff0c;對方測試環(huán)境時(shí)好時(shí)壞,給他們打電話,他們說很忙暫時(shí)沒時(shí)間管我。
唐僧:悟凈,這些為師都知道。程序員都沒什么文化,注釋、文檔總是寫不好;而且非常苦逼,總是熬夜加班,所以沒有時(shí)間。你應(yīng)該理解以下。
沙僧:哎。。。入?yún)?bào)文格式為json,且非常復(fù)雜,我拼了一上午報(bào)文,每次都返回入?yún)?bào)文格式不正確。
唐僧:你是怎么拼json格式的報(bào)文呢?
沙僧:傳統(tǒng)方法啊,先用Map和List組合好,再轉(zhuǎn)成json字符串。
唐僧:如果json非常復(fù)雜的話,要定義好多Map和List,光起些好點(diǎn)兒的名字就夠頭大的,還要再互相嵌套起來,稍有不慎,很容易出錯(cuò)。真是夠夠的了。而且要寫很多代碼。
沙僧:誰說不是呢,師傅有什么好方法嗎?
唐僧:json結(jié)構(gòu)你應(yīng)該很熟悉,它是一個(gè)自我嵌套的遞歸結(jié)構(gòu)。那我們就來設(shè)計(jì)一個(gè)構(gòu)建器來直接構(gòu)建json字符串,就叫JsonBuilder吧。
沙僧:我突然想起StringBuilder,它的流式api非常好用,快捷方便。只是字符串是一維的,只有先后順序,但json是二維的,既有先后順序,還有內(nèi)外順序。
唐僧:你說的內(nèi)外順序其實(shí)就是父子關(guān)系,這也很好處理。
  1)只需維護(hù)一個(gè)指向當(dāng)前級別的指針,如果只是添加簡單的key-value,當(dāng)前級別保持不變。
  2)如果添加了復(fù)合value(子節(jié)點(diǎn)),當(dāng)前指針指向新添加的級別(深入一級),此時(shí)該級別就成了新的當(dāng)前級別。
  3)當(dāng)前級別結(jié)束后只需回到父級別(退出一級),此時(shí)父級別就又成了新的當(dāng)前級別,如此往復(fù)下去即可。
沙僧:師傅,恕徒兒愚鈍,您講的太抽象了,能不能舉個(gè)例子。
唐僧:看下面的json,

{
? "string":"編程新說",
? "int":33,
? "boolean":true,
? "double":3.14,
? "null":null,
? "sub1":{
??? "string":"編程新說",
??? "int":33,
??? "boolean":true,
??? "double":3.14,
??? "null":null
? },
? "sub2":[
??? {
????? "string":"編程新說",
????? "int":33,
????? "boolean":true,
????? "double":3.14,
????? "null":null
??? },
??? {
????? "string":"編程新說",
????? "int":33,
????? "boolean":true,
????? "double":3.14,
????? "null":null
??? }
? ],
? "sub3":[
??? "編程新說",
??? 33,
??? true,
??? 3.14,
??? null
? ]
}
  1)首先指針指向最外層級別,此時(shí)添加5個(gè)簡單的key-value,整個(gè)添加過程級別保持不變,即這5個(gè)值都添加給了當(dāng)前級別。
  2)然后添加sub1節(jié)點(diǎn),它是一個(gè)復(fù)合節(jié)點(diǎn),所以當(dāng)前指針指向新添加的節(jié)點(diǎn)級別,此時(shí)添加5個(gè)簡單的key-value,都添加給了sub1,結(jié)束后指針回退到上一級。
  3)此時(shí)再添加sub2,當(dāng)前指針指向sub2,因sub2是一個(gè)數(shù)組,也是復(fù)合節(jié)點(diǎn)。
  4)數(shù)組里包含的又是復(fù)合節(jié)點(diǎn),只不過沒有名字而已。添加一個(gè)無名字節(jié)點(diǎn),當(dāng)前指針指向該節(jié)點(diǎn),此時(shí)可以為它添加5個(gè)key-value,然后回到上一級,即數(shù)組級別
  5)然后添加第二個(gè)無名字節(jié)點(diǎn),為它添加5個(gè)key-value,回到上一級,再回到上一級。
  6)然后添加sub3,因?yàn)樗膙alue都是簡單值,所以添加value時(shí)當(dāng)前級別不變,停留在數(shù)組級別。完成之后回到上一級,即最外層級別。
沙僧:這么一講解倒是非常直觀,層次也很清晰,所見即所得。還是師傅厲害。
唐僧:為師也沒那么厲害了,只是趁著你們打妖怪的時(shí)候,多琢磨了一會(huì)兒。說起來簡單,實(shí)現(xiàn)起來還是有些許難度的,要不你來試試。可以參考這個(gè)示例。

JsonBuilder jb = new JsonBuilder();
jb.kv("string", "編程新說")
.kv("int", 33)
.kv("boolean", true)
.kv("double", 3.14)
.kv("null", null)
.ko("sub1")
?? ?.kv("string", "編程新說")
?? ?.kv("int", 33)
?? ?.kv("boolean", true)
?? ?.kv("double", 3.14)
?? ?.kv("null", null)
.end()
.ka("sub2")
?? ?.io()
?? ??? ?.kv("string", "編程新說")
?? ??? ?.kv("int", 33)
?? ??? ?.kv("boolean", true)
?? ??? ?.kv("double", 3.14)
?? ??? ?.kv("null", null)
?? ?.end()
?? ?.io()
?? ??? ?.kv("string", "編程新說")
?? ??? ?.kv("int", 33)
?? ??? ?.kv("boolean", true)
?? ??? ?.kv("double", 3.14)
?? ??? ?.kv("null", null)
?? ?.end()
.end()
.ka("sub3")
?? ?.iv("編程新說")
?? ?.iv(33)
?? ?.iv(true)
?? ?.iv(3.14)
?? ?.iv(null)
.end();
沙僧:好的,只是這變量名字有點(diǎn)。。。但別光我一人啊,也讓廣大群眾試試吧。

  悟凈得到師傅的指點(diǎn)后,有一點(diǎn)小小的豁然開朗,決定自己去實(shí)現(xiàn)一把。但想到又開始去對接口,不由得嘆氣一聲,哎。。。

?

PS:也可以按照此方法寫一個(gè)MapBuilder。
PS:也可以按照此方法寫一個(gè)XmlBuilder。

?

?

(完)

?

編程新說


用獨(dú)特的視角說技術(shù)

?

轉(zhuǎn)載于:https://www.cnblogs.com/lixinjie/p/json-builder.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的JsonBuilder初出茅庐的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。