用JAVA进行Json数据解析(对象数组的相互嵌套)
这段时间我们在做一个英语翻译软件的小小小APP,涉及到了对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\"}]}";
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 }
到这里就解析完啦!
你为什么不努力。。