有關(guān)Json
Json作為一種輕量級(jí)的交換數(shù)據(jù)形式舟陆,由于其自身的一些優(yōu)良特性比如包含有效信息多荆陆,易于閱讀和解析而廣受碼農(nóng)以及架構(gòu)的喜愛(ài)。使用Json的場(chǎng)景也很多诊沪,比如讀取解析系列化的Json格式的數(shù)據(jù),我們需要將一個(gè)Json的字符串解析成我們想要的對(duì)象或者提取我們需要的信息曾撤。
稍稍接觸Json數(shù)據(jù)解析的應(yīng)該都會(huì)比較熟悉通過(guò)一些工具庫(kù)比如fastjson或者gons轉(zhuǎn)換為我們想要的對(duì)象端姚。舉例將如下的字符串解析為一個(gè)Person對(duì)象。
這時(shí)候我們需要聲明一個(gè)與此Json能夠映射的對(duì)象挤悉,好比這樣
這是解析Json數(shù)據(jù)的一種比較繁瑣的方式渐裸,這種方式有時(shí)候是必不可少的,因?yàn)槲覀儾粌H要解析json數(shù)據(jù)装悲,?同時(shí)還需要用到解析后的對(duì)象做后續(xù)的業(yè)務(wù)處理昏鹃。
但是,有時(shí)候我們根本用不上這個(gè)對(duì)象诀诊,只想提取出需要的信息洞渤,比如插入到數(shù)據(jù)庫(kù),或者提取出一個(gè)字段作為一個(gè)判定標(biāo)識(shí)属瓣。這時(shí)候载迄,我們可以通過(guò)如下介紹的方式來(lái)實(shí)現(xiàn)即可,不需要通過(guò)新建對(duì)象的方式抡蛙。
下面主要介紹兩種方式宪巨,分別是通過(guò)fastjson和gson的方式實(shí)現(xiàn)。
通過(guò)FastJson實(shí)現(xiàn)
FastJson是阿里巴巴發(fā)布的一個(gè)Json處理工具包溜畅,其特點(diǎn)就是解析快捏卓,效率高,而且支持Java Bean慈格、集合怠晴、Map、日期浴捆、Enum蒜田,支持范型,支持自省等选泻。下面我們看看借助FastJson我們?nèi)绾翁崛〕鑫覀兿胍男畔?/p>
通過(guò)靜態(tài)方法parse冲粤,將字符串解析為一個(gè)Object對(duì)象
將返回的jsonObj強(qiáng)轉(zhuǎn)為一個(gè)Map集合
在map集合中獲取需要的信息,比如提取出field1對(duì)應(yīng)的value1
解析出來(lái)的Object對(duì)象其實(shí)就是一個(gè)map集合页眯,這里的filed1就是map中的key梯捕,value1就是map集合中的value
對(duì)于像fieldContext本身就是一個(gè)嵌套的map集合,我們可以從fieldContext的值中再解析拆為map集合
顯然窝撵,我們成功的獲取到了想要提取的字段信息傀顾,同時(shí)也沒(méi)有新建與json對(duì)應(yīng)的對(duì)象。
通過(guò)Gson實(shí)現(xiàn)
GSON是Google開(kāi)發(fā)的Java API碌奉,主要用途為序列化Java對(duì)象為JSON字符串短曾,或反序列化JSON字符串成Java對(duì)象寒砖。
相比較于FastJson,在實(shí)現(xiàn)我們前面提到的提取信息的實(shí)現(xiàn)細(xì)節(jié)上會(huì)有一些不同嫉拐。
創(chuàng)建一個(gè)Gson對(duì)象
調(diào)用Gson的fromJson方法將字符串直接解析成HashMap類型哩都,這一點(diǎn)要比FastJson來(lái)的更加快捷
后面的用法與使用FastJson解析數(shù)據(jù)一致,也是從Map中提取對(duì)應(yīng)字段的值
最終得到的結(jié)果如下
以上主要是針對(duì)如何快速?gòu)腏son字符串中提取需要信息的場(chǎng)景給出的解決思路婉徘,分別就當(dāng)前流行的FastJson和Gson給出示例代碼漠嵌,后面有機(jī)會(huì)再詳細(xì)說(shuō)說(shuō)有關(guān)解析Json的具體實(shí)例和細(xì)節(jié)。