標籤:通過 ror 方法 輸出 json sys 對象數組 basic 相關
這段時間我們在做一個英語翻譯軟體的小小小APP,涉及到了對Json資料的解析,所以特地來總結一下!
假設我們要對如下資料進行解析,其實在平時,返回的Json資料是很亂的,很難分清資料的關係,這是經過相關工具美化後的結果
{
"translation": [
"愛"
],
"basic": {
"us-phonetic": "l?v",
"phonetic": "l?v",
"uk-phonetic": "l?v",
"explains": [
"n. 戀愛;親愛的;酷愛;喜愛的事物",
"vt. 喜歡;熱愛;愛慕",
"vi. 愛",
"n. (Love)人名;(英)洛夫"
]
},
"web": [
{
"value": [
"愛情",
"愛",
"愛"
],
"key": "Love"
},
{
"value": [
"無盡的愛",
"藍色生死戀",
"不了情"
],
"key": "Endless Love"
},
{
"value": [
"早戀",
"青春期戀愛",
"初戀"
],
"key": "puppy love"
}
]
}
我們把資料定義為一個字串,加入逸出字元之後就成了這樣,有點亂是吧,所以我們根據分析就好啦。
Json資料說白了就是對象和數組的相互嵌套,那麼我們開始吧!
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\":[\"無盡的愛\",\"藍色生死戀\",\"不了情\"],\"key\":\"Endless Love\"},{\"value\":[\"早戀\",\"青春期戀愛\",\"初戀\"],\"key\":\"puppy love\"}]}";
JSONObject str = JSONObject.fromObject(st); //json資料的最外層肯定是一個對象,參數為字串
//對象str又分為3部分:translation,basic,web
if(str.has("translation")){
JSONArray tr = str.getJSONArray("translation"); //translation是一個json數組
for(int i = 0 ;i<tr.size();i++){ //對數組元素進行遍曆
System.out.println(tr.getString(i)); //因為元素的值是String類型的所以忽的值的方法是getString(index)
}
}
//basic中有數組也有元素
if(str.has("basic")){
JSONObject us = str.getJSONObject("basic"); //對元素進行解析,並輸出元素的值
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對象
JSONArray explain = basic.getJSONArray("explains"); //再獲得basic對象下的explains數組
for(int i = 0;i<explain.size(); i++){ //對數組元素進行遍曆
System.out.println(explain.getString(i));
}
}
if(str.has("web")){ //web是一個數組,每個數組元素又是三個Json對象
System.out.println("拓展:");
JSONArray web = str.getJSONArray("web");
for(int i = 0; i<web.size() ; i++ ){ //但是對象中又嵌套著數組
String t = web.getString(i); //遍曆過程將web數組元素賦給String型變數
JSONObject we = JSONObject.fromObject(t); //通過String又得到每個元素的對象
if(we.has("key")){
System.out.print(we.getString("key")+"\t"); //得到對象中的元素
}
if(we.has("value")){
JSONArray value = we.getJSONArray("value");
for(int x = 0 ; x<value.size() ;x++ ){ //遍曆對象中嵌套的數組
System.out.print(value.getString(x)); //得到數組元素的值
if(x<value.size()-1){
System.out.print(";");
}
}
}
System.out.println();
}
}
到這裡就解析完啦!
用JAVA進行Json資料解析(對象數組的相互嵌套)