欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用Java进行Json数据的解析(对象数组的相互嵌套)

程序员文章站 2024-02-21 18:33:28
这段时间我们在做一个英语翻译软件的小小小app,涉及到了对json数据的解析,所以特地来总结一下! 假设我们要对如下数据进行解析,其实在平时,返回的json数据是很乱的,...

这段时间我们在做一个英语翻译软件的小小小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数据的解析(对象数组的相互嵌套)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。