json遍历 分别使用【原】
json遍历
一 使用org.json.JSONObject遍历
之后的所有遍历都参考了:http://blog.csdn.net/u010648555/article/details/49815387 的设计思路.
package test.json; import java.util.Iterator;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject; /**
* 该类引用自QQ号为742981086同学的链接http://blog.csdn.net/u010648555/article/details/49815387
* 思路很清晰,值得推荐.
* traverseJson(...)被我修改过注释.
* traverse1()保持不变
* traverse2()被我改过样例
*
* @author 359920692
*
*/
public class TraverseJson { /**
* 遍历json格式数据
*
* @param jsonObjArg
* @return
* @throws JSONException
*/
public static Object traverseJson(Object jsonObjArg) throws JSONException {
if (jsonObjArg == null) {
return null;
}
if (jsonObjArg instanceof JSONObject) {// 如果是JSONObject实例 (其实JSONObject内存就是以map格式存储的)
// 创建json对象
JSONObject retJsonObj = new JSONObject();
// 将json转换为JsonObject对象
JSONObject jsonObj = (JSONObject) jsonObjArg;
// 迭代 map所有的keys
Iterator it = jsonObj.keys();
while (it.hasNext()) {
// 获取map的key
String key = (String) it.next();
// 得到value的值
Object value = jsonObj.get(key);
// 递归遍历
retJsonObj.put(key, traverseJson(value));
}
return retJsonObj;
} else if (jsonObjArg instanceof JSONArray) {// 如果是JSONArray 实例
JSONArray retJsonArray = new JSONArray();
JSONArray jsonArray = (JSONArray) jsonObjArg;
// 获取Array 的长度
int length = jsonArray.length();
for (int i = 0; i < length; i++) {
retJsonArray.put(traverseJson(jsonArray.get(i)));
}
return retJsonArray;
} else {
// 除了JSONObj,JSONArray就只有最原始的String类型了,此时可以对String进行
// "加/解密,变换等操作",如return
// jsonObjArg+"^_^",可以让每个值都微笑起来
return jsonObjArg;
}
} /* 生成的JSON数据1
{
"QQ": [
"742981086@qq.com",
"742981086"
],
"name": "aflyun",
"age": 22,
"hobby": [
"编程",
"看书",
"徒步",
"爬山",
"游泳"
],
"adderss": {
"省份": "广东",
"市": "惠州",
"国籍": "中国"
}
}
*/
public static void traverse1() throws JSONException {
// 创建 一个JsonObjec对象
JSONObject retJsonObj = new JSONObject();
// 姓名
retJsonObj.put("name", "aflyun");
// 年龄
retJsonObj.put("age", 22);
// 联系方式
JSONArray arryQQ = new JSONArray();
arryQQ.put("742981086@qq.com").put("742981086");
retJsonObj.put("QQ", arryQQ);
// 地址 map
JSONObject jsonAdress = new JSONObject();
jsonAdress.put("country", "中国").put("省份", "广东").put("市", "惠州");
retJsonObj.put("adderss", jsonAdress);
// 生成数组array
JSONArray jArray = new JSONArray();
jArray.put("编程").put("看书").put("徒步").put("爬山").put("游泳");
retJsonObj.put("hobby", jArray);
System.out.println("1_________________________________________________________");
System.out.println(retJsonObj);
System.out.println(traverseJson(retJsonObj));
System.out.println("1_________________________________________________________\n");
} /*
生成数组类型的json格式数据
[
{
"Province": "ZheJiang"
},
[
{
"Person": "bobo"
},
{
"Fruit": [
"Apple",
"Banana",
"Pear"
]
}
]
]
*/
public static void traverse2() throws JSONException {
JSONArray retJArray = new JSONArray();
JSONObject aJson = new JSONObject();
aJson.put("Province", "ZheJiang");
retJArray.put(aJson);
JSONArray jArray1 = new JSONArray();
JSONObject personObj = new JSONObject();
personObj.put("Person", "bobo");
JSONArray fruitArray = new JSONArray();
fruitArray.put("Banana").put("Apple").put("Pear");
JSONObject fruitObj = new JSONObject();
fruitObj.put("Fruit", fruitArray);
jArray1.put(personObj).put(fruitObj);
// 将组装好的数据放入要返回的json数组中
retJArray.put(jArray1); System.out.println("2_________________________________________________________");
System.out.println(retJArray);
System.out.println(traverseJson(retJArray));
System.out.println("2_________________________________________________________\n");
} public static void main(String[] args) throws JSONException {
traverse1();
traverse2();
} }
二. 使用 com.alibaba.fastjson.JSON fastjson遍历
FastJson一些常见方法(API):处理JSON变得好简单
json遍历 分别使用【原】的更多相关文章
- 第61天:json遍历和封装运动框架(多个属性)
一.json 遍历 for in 关键字 for ( 变量 in 对象) { 执行语句; } 例如: var json = {width:200,height:300,left:50}co ...
- json遍历,List<Map<String,Object>>遍历
js怎样给input对象追加属性,如disabled $(":textbox").attr({"disabled":true}); List<Map< ...
- com.alibaba.fastjson和org.json遍历获取key
推荐都是用fastjson.org.json好像不支持序列化. com.alibaba.fastjson遍历获取key的方法: //fastjson解析方法 for (Map.Entry<Str ...
- jQuery json遍历渲染到页面并且拼接html
jQuery 处理 json遍历在页面中显示,并且拼接html. 1 <title>json多维数组遍历渲染</title> 2 3 <body> 4 <di ...
- jquery json遍历和动态绑定事件
<div id='tmpselectorList' style='border: 1px solid grey;max-height: 150px;position:absolute;text- ...
- 在Delphi7中JSON遍历节点不支持使用IN处理方法
相关资料:http://www.cnblogs.com/del/archive/2009/10/23/1588690.html Delphi2007源代码: procedure TForm1.Butt ...
- JSON 遍历转为Model Bean
@RequestMapping(value = "/batchAddPageIndexBrand") @ResponseBody public HashMap<String, ...
- 问题-Delphi7中JSON遍历节点不支持使用IN处理方法?
相关资料:http://www.cnblogs.com/del/archive/2009/10/23/1588690.html 问题现象:在高版本中可以使用IN处理JSON的节点循环问题,可是发现D7 ...
- 获取地址栏参数,json遍历
1. 获取地址栏参数 GetQueryString: function(name){ // 获取地址栏参数 var reg = new RegExp("(^|&)"+ na ...
随机推荐
- 七牛云域名DV SSL证书申请流程以及CDN融合加速配置
从2017年起,苹果ios以及微信小程序都陆续要求请求连接request地址是使用HTTPS协议的.所以在项目开发阶段就要考虑解决https的问题,同时这也是为项目实际安全所考虑.最近我也是在折腾项目 ...
- Selenium Grid的Java调用方法
java -jar selenium-server-standalone-.jar -role hub explorer http://192.168.1.173:4444/grid/console ...
- 数组操作方法(包括es5)
//push(); 定义:可以可向数组的末尾添加一个或更多元素,并返回新的长度. 方法:push(); 语法:数组.push(新元素1,新元素2,....,新元素x) 返回值:把指定的值添加到数组后的 ...
- Centos7搭建LAMP+Typecho博客
一.安装Apache的httpd服务 yum install httpd # 安装httpd服务 systemctl start httpd # 启动httpd服务 systemctl status ...
- width() 、 height() 方法;innerWidth() 、innerHeight() 方法;outerWidth() 、 outerHeight() 方法的区别
1.width() . height() 方法 设置或返回元素的宽度.高度(不包括内边距.边框或外边距): 2.innerWidth() .innerHeight() 方法 返回元素的宽度.高度(包括 ...
- [转]能用HTML/CSS解决的问题就不要使用JS
原文链接:http://www.codeceo.com/article/html-css-not-js.html 为什么说能使用html/css解决的问题就不要使用JS呢?两个字,因为简单.简单就意味 ...
- __new__ __init__区别
1 class A(object): 2 def __init__(self,*args, **kwargs): 3 print "init A" 4 def __new__(cl ...
- MyBatis学习(七)MyBatis关联映射之多对多映射
对于数据库中的多对多关系建议使用一个中间表来维护关系. 1.创建四张表,分别为用户表,商品表,订单表,中间表. DROP TABLE IF EXISTS `t_user`; CREATE TABLE ...
- docker --swarm启动2375端口监听
首先要下载swarm docker pull swarm 然后停掉docker服务: service docker stop 然后启动deamon: sudo dockerd -H tcp://0.0 ...
- BZOJ3129 SDOI2013方程(容斥原理+扩展lucas)
没有限制的话算一个组合数就好了.对于不小于某个数的限制可以直接减掉,而不大于某个数的限制很容易想到容斥,枚举哪些超过限制即可. 一般情况下n.m.p都是1e9级别的组合数没办法算.不过可以发现模数已经 ...