這段時間我們在做一個英語翻譯軟件的小小小APP,涉及到了對Json數據的解析,所以特地來總結一下!
假設我們要對如下數據進行解析,其實在平時,返回的Json數據是很亂的,很難分清數據的關系,這是經過相關工具美化后的結果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
{ "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數據說白了就是對象和數組的相互嵌套,那么我們開始吧!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
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數據的解析(對象數組的相互嵌套)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:http://www.cnblogs.com/zz-1120-wtenlb/archive/2017/08/22/7414430.html