用JAVA進行Json數據解析(對象數組的相互嵌套)

這段時間咱們在作一個英語翻譯軟件的小小小APP,涉及到了對Json數據的解析,因此特意來總結一下!web

假設咱們要對以下數據進行解析,其實在平時,返回的Json數據是很亂的,很難分清數據的關係,這是通過相關工具美化後的結果json

 1 {
 2   "translation": [
 3     "愛"
 4   ],
 5   "basic": {
 6     "us-phonetic": "lʌv",
 7     "phonetic": "lʌv",
 8     "uk-phonetic": "lʌv",
 9     "explains": [
10       "n. 戀愛;親愛的;酷愛;喜好的事物",
11       "vt. 喜歡;熱愛;愛慕",
12       "vi. 愛",
13       "n. (Love)人名;(英)洛夫"
14     ]
15   },
16   "web": [
17     {
18       "value": [
19         "愛情",
20         "愛",
21         "愛"
22       ],
23       "key": "Love"
24     },
25     {
26       "value": [
27         "無盡的愛",
28         "藍色生死戀",
29         "不了情"
30       ],
31       "key": "Endless Love"
32     },
33     {
34       "value": [
35         "早戀",
36         "青春期戀愛",
37         "初戀"
38       ],
39       "key": "puppy love"
40     }
41   ]
42 }

 

         咱們把數據定義爲一個字符串,加入轉義字符以後就成了這樣,有點亂是吧,因此咱們根據上圖分析就好啦。數組

         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\"}]}";less


       

 1  JSONObject str = JSONObject.fromObject(st);    //json數據的最外層確定是一個對象,參數爲字符串
 2                                                 //對象str又分爲3部分:translation,basic,web   
 3         if(str.has("translation")){         
 4             JSONArray tr = str.getJSONArray("translation"); //translation是一個json數組
 5             for(int i = 0 ;i<tr.size();i++){                //對數組元素進行遍歷
 6                 System.out.println(tr.getString(i));       //由於元素的值是String類型的因此忽的值的方法是getString(index)
 7             }
 8         }
 9 
10                                                                                                                                                                //basic中有數組也有元素
11         if(str.has("basic")){                             
12             JSONObject us = str.getJSONObject("basic"); //對元素進行解析,並輸出元素的值
13             System.out.print("美:[" + us.getString("us-phonetic") + "]\t");     
14             
15             JSONObject uk = str.getJSONObject("basic");
16             System.out.print("英:[" + us.getString("uk-phonetic") + "]\n");
17             
18             JSONObject basic = str.getJSONObject("basic"); //先得到basic對象
19             JSONArray explain = basic.getJSONArray("explains"); //再得到basic對象下的explains數組 
20             for(int i = 0;i<explain.size(); i++){   //對數組元素進行遍歷
21                 System.out.println(explain.getString(i));
22             }     
23         }
24         if(str.has("web")){    //web是一個數組,每一個數組元素又是三個Json對象
25             System.out.println("拓展:");                       
26             JSONArray web = str.getJSONArray("web");                
27             for(int i = 0; i<web.size() ; i++ ){ //可是對象中又嵌套着數組
28                 String t = web.getString(i);//遍歷過程將web數組元素賦給String型變量
29                 JSONObject we = JSONObject.fromObject(t); //經過String又獲得每一個元素的對象
30                 if(we.has("key")){             
31                     System.out.print(we.getString("key")+"\t");//獲得對象中的元素
32                 }
33                 if(we.has("value")){                       
34                     JSONArray value = we.getJSONArray("value");
35                     for(int x = 0 ; x<value.size() ;x++ ){ //遍歷對象中嵌套的數組
36                         System.out.print(value.getString(x));//獲得數組元素的值
37                         if(x<value.size()-1){
38                             System.out.print(";");
39                         }
40                     }
41                 }
42                 System.out.println();
43             }
44         }

 

 

 

到這裏就解析完啦!工具

相關文章
相關標籤/搜索