用JAVA进行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数据解析(对象数组的相互嵌套)的更多相关文章
- Java XML JSON 数据解析
下面我们通过一段代码了解一下解析JSON格式数据的基本过程: 提示:使用JSON需要导入 JSON 相关的多个Jar文件 import net.sf.json.JSONObject; public c ...
- cocos2d-x把json数据解析到数组或字典中(libjson库)
以前在cocos2d-x项目中用到json解析,集成了libjson库后发现网上提供的解析方法大多是在解析过程中取得值,并没有将解析结果有效的保存起来,于是摸索一番,把解析结果根据数据格式存到数组或字 ...
- Java技巧——将前端的对象数组通过Json字符串传到后端并转换为对象集合
Java技巧——将前端的对象数组通过Json字符串传到后端并转换为对象集合 摘要:本文主要记录了如何将将前端的对象数组通过Json字符串传到后端,并在后端将Json字符串转换为对象集合. 前端代码 前 ...
- JSON数据解析 基础知识及链接收集
JSON数据解析学习 JSON介绍 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式. JSON 是存储和交换文本信息的语法.类似 XML.但是JSON 比 ...
- iOS - JSON 数据解析
iOS - JSON 数据解析 前言 NS_CLASS_AVAILABLE(10_7, 5_0) @interface NSJSONSerialization : NSObject @availab ...
- Android学习笔记之JSON数据解析
转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...
- JSON数据解析及gson.jar包
从服务器端接收数据的时候,那些数据必须以浏览器能够理解的格式来发送. 服务器端的编程语言只能以如下 3 种格式返回数据: HTML XML JSON JSON一种简单的数据格式,比xml更轻巧. JS ...
- 使用Gson轻松解决复杂结构的Json数据解析
转载请注明来源: http://blog.csdn.net/kjunchen/article/details/50961803 JSON简介 JSON(JavaScript Object Notati ...
- 最简单简洁高效的Json数据解析
一.无图无真相 二.主要代码 1.导入jar包 拷贝fastjson.jar包到projectlibs包下 2.封装工具类JsonUtil.java package com.example.parse ...
随机推荐
- 叼叼叼,HTML5日期(Date)类型和文本(Text)类型互相转换
<input placeholder="From" class="form-control" type="text" onfocus= ...
- 从 PHP 到 Java
* { color: #3e3e3e } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans ...
- Tomcat重定向
tomcat默认情况下不带www的域名是不会跳转到带www的域名的,而且也无法像apache那样通过配置.htaccess来实现.如果想要把不带"www'的域名重定向到带"www& ...
- ORACLE 中NUMBER类型默认的精度和Scale问题
在ORACLE数据库中,NUMBER(P,S)是最常见的数字类型,可以存放数据范围为10^-130~10^126(不包含此值),需要1~22字节(BYTE)不等的存储空间.P 是Precison的英文 ...
- 分析Android-Universal-Image-Loader的缓存处理机制
最近看了UIL中的缓存实现,才发现其实这个东西不难,没有太多的进程调度,没有各种内存读取控制机制.没有各种异常处理.反正UIL中不单代码写的简单,连处理都简单.但是这个类库这么好用,又有这么多人用,那 ...
- 阿里巴巴开源前端框架--Weex实践
Weex是最近很火很NB的一个技术产品,因为本篇介绍的是怎样使用Weex的最佳实践,所以就不罗里吧嗦的夸它怎么怎么好了,感兴趣的可以访问Weex HomePage,或加入旺旺群:1330170019. ...
- Attribute name "aphmodel" associated with an element type "mxg" must be followed by the ' = ' charac
1.错误描述 org.apache.batik.transcoder.TranscoderException: null Enclosed Exception: Attribute name &quo ...
- 无法连接MySQL
1.错误描述 Error No. 2003 Can't connect to MySQL Server on 'localhost' (10061) 2.错误原因 打开任务管理器,关闭了m ...
- MySql获取所有表名
如何获取MySql中所有表的的表名? sql语句是:show tables 返回结果如下: 不仅仅返回了所有的表名,更返回了视图的名字.
- CSS开启硬件加速提高网站性能
国外一篇文章,有点意思,转载过来,准备尝试下~ 中文地址:http://www.cnblogs.com/yzw7489757/ 原文地址:http://blog.teamtreehouse.com/i ...