這段時間咱們在作一個英語翻譯軟件的小小小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 }
到這裏就解析完啦!工具