使用Java進(jìn)行Json數(shù)據(jù)的解析(對(duì)象數(shù)組的相互嵌套)
這段時(shí)間我們?cè)谧鲆粋€(gè)英語翻譯軟件的小小小APP,涉及到了對(duì)Json數(shù)據(jù)的解析,所以特地來總結(jié)一下!
假設(shè)我們要對(duì)如下數(shù)據(jù)進(jìn)行解析,其實(shí)在平時(shí),返回的Json數(shù)據(jù)是很亂的,很難分清數(shù)據(jù)的關(guān)系,這是經(jīng)過相關(guān)工具美化后的結(jié)果
{
"translation": [
"愛"
],
"basic": {
"us-phonetic": "lʌv",
"phonetic": "lʌv",
"uk-phonetic": "lʌv",
"explains": [
"n. 戀愛;親愛的;酷愛;喜愛的事物",
"vt. 喜歡;熱愛;愛慕",
"vi. 愛",
"n. (Love)人名;(英)洛夫"
]
},
"web": [
{
"value": [
"愛情",
"愛",
"愛"
],
"key": "Love"
},
{
"value": [
"無盡的愛",
"藍(lán)色生死戀",
"不了情"
],
"key": "Endless Love"
},
{
"value": [
"早戀",
"青春期戀愛",
"初戀"
],
"key": "puppy love"
}
]
}
我們把數(shù)據(jù)定義為一個(gè)字符串,加入轉(zhuǎn)義字符之后就成了這樣,有點(diǎn)亂是吧,所以我們根據(jù)上圖分析就好啦。
Json數(shù)據(jù)說白了就是對(duì)象和數(shù)組的相互嵌套,那么我們開始吧!
String st = "{\"translation\":[\"愛\"],\"basic\":{\"us-phonetic\":\"lʌv\",\"phonetic\":\"lʌv\",\"uk-phonetic\":\"lʌv\",\"explains\":[\"n. 戀愛;親愛的;酷愛;喜愛的事物\",\"vt. 喜歡;熱愛;愛慕\",\"vi. 愛\",\"n. (Love)人名;(英)洛夫\"]},\"query\":\"love\",\"errorCode\":0,\"web\":[{\"value\":[\"愛情\",\"愛\",\"愛\"],\"key\":\"Love\"},{\"value\":[\"無盡的愛\",\"藍(lán)色生死戀\",\"不了情\"],\"key\":\"Endless Love\"},{\"value\":[\"早戀\",\"青春期戀愛\",\"初戀\"],\"key\":\"puppy love\"}]}";
JSONObject str = JSONObject.fromObject(st); //json數(shù)據(jù)的最外層肯定是一個(gè)對(duì)象,參數(shù)為字符串
//對(duì)象str又分為3部分:translation,basic,web
if(str.has("translation")){
JSONArray tr = str.getJSONArray("translation"); //translation是一個(gè)json數(shù)組
for(int i = 0 ;i<tr.size();i++){ //對(duì)數(shù)組元素進(jìn)行遍歷
System.out.println(tr.getString(i)); //因?yàn)樵氐闹凳荢tring類型的所以忽的值的方法是getString(index)
}
}
//basic中有數(shù)組也有元素
if(str.has("basic")){
JSONObject us = str.getJSONObject("basic"); //對(duì)元素進(jìn)行解析,并輸出元素的值
System.out.print("美:[" + us.getString("us-phonetic") + "]\t");
JSONObject uk = str.getJSONObject("basic");
System.out.print("英:[" + us.getString("uk-phonetic") + "]\n");
JSONObject basic = str.getJSONObject("basic"); //先獲得basic對(duì)象
JSONArray explain = basic.getJSONArray("explains"); //再獲得basic對(duì)象下的explains數(shù)組
for(int i = 0;i<explain.size(); i++){ //對(duì)數(shù)組元素進(jìn)行遍歷
System.out.println(explain.getString(i));
}
}
if(str.has("web")){ //web是一個(gè)數(shù)組,每個(gè)數(shù)組元素又是三個(gè)Json對(duì)象
System.out.println("拓展:");
JSONArray web = str.getJSONArray("web");
for(int i = 0; i<web.size() ; i++ ){ //但是對(duì)象中又嵌套著數(shù)組
String t = web.getString(i); //遍歷過程將web數(shù)組元素賦給String型變量
JSONObject we = JSONObject.fromObject(t); //通過String又得到每個(gè)元素的對(duì)象
if(we.has("key")){
System.out.print(we.getString("key")+"\t"); //得到對(duì)象中的元素
}
if(we.has("value")){
JSONArray value = we.getJSONArray("value");
for(int x = 0 ; x<value.size() ;x++ ){ //遍歷對(duì)象中嵌套的數(shù)組
System.out.print(value.getString(x)); //得到數(shù)組元素的值
if(x<value.size()-1){
System.out.print(";");
}
}
}
System.out.println();
}
}
到這里就解析完啦!
以上這篇使用Java進(jìn)行Json數(shù)據(jù)的解析(對(duì)象數(shù)組的相互嵌套)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java使用String類格式化當(dāng)前日期實(shí)現(xiàn)代碼
這篇文章主要介紹了Java使用String類格式化當(dāng)前日期實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-02-02
WebSocket實(shí)現(xiàn)數(shù)據(jù)庫(kù)更新時(shí)前端頁面刷新
這篇文章主要為大家詳細(xì)介紹了WebSocket實(shí)現(xiàn)數(shù)據(jù)庫(kù)更新時(shí)前端頁面刷新,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04
java枚舉類的構(gòu)造函數(shù)實(shí)例詳解
這篇文章主要介紹了java枚舉類的構(gòu)造函數(shù)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05
Java concurrency線程池之線程池原理(二)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了Java concurrency線程池之線程池原理第二篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
Java如何比較兩個(gè)對(duì)象并獲取不相等的字段詳解
這篇文章主要給大家介紹了關(guān)于Java如何比較兩個(gè)對(duì)象并獲取不相等的字段以及JAVA判斷(獲?。﹥蓚€(gè)相同對(duì)象不同的數(shù)據(jù)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-11-11
java中HashMap.values()轉(zhuǎn)為ArrayList()問題
這篇文章主要介紹了java中HashMap.values()轉(zhuǎn)為ArrayList()問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03

