一个强大的json解析工具类
该工具类利用递归原理,能够将任意结构的json字符串进行解析。当然,如果需要解析为对应的实体对象时,就不能用了
package com.wot.cloudsensing.carrotfarm.util; import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map; import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject; /**
* 将json字符串转换为对应的map等java对象 调用示例: CommonJSONParser commonJSONParser = new
* CommonJSONParser(); Map<String, Object> result =
* commonJSONParser.parse(jsonDataStr);
*
*/
public class JSonParserUtil {
public Map<String, Object> parse(String jsonStr) { Map<String, Object> result = null; if (null != jsonStr) {
try { JSONObject jsonObject = new JSONObject(jsonStr);
result = parseJSONObject(jsonObject); } catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // if (null != jsonStr) return result;
} private Map<String, Object> parseJSONObject(JSONObject jsonObject)
throws JSONException {
Map<String, Object> valueObject = null;
if (null != jsonObject) {
valueObject = new HashMap<String, Object>(); Iterator<String> keyIter = jsonObject.keys();
while (keyIter.hasNext()) {
String keyStr = keyIter.next();
Object itemObject = jsonObject.opt(keyStr);
if (null != itemObject) {
valueObject.put(keyStr, parseValue(itemObject));
} // if (null != itemValueStr) } // while (keyIter.hasNext())
} // if (null != valueStr) return valueObject;
} private Object parseValue(Object inputObject) throws JSONException { Object outputObject = null;
if (null != inputObject) { if (inputObject instanceof JSONArray) {
outputObject = parseJSONArray((JSONArray) inputObject);
} else if (inputObject instanceof JSONObject) {
outputObject = parseJSONObject((JSONObject) inputObject);
} else if (inputObject instanceof String
|| inputObject instanceof Boolean
|| inputObject instanceof Integer) {
outputObject = inputObject;
} } return outputObject;
} private List<Object> parseJSONArray(JSONArray jsonArray)
throws JSONException { List<Object> valueList = null; if (null != jsonArray) {
valueList = new ArrayList<Object>(); for (int i = 0; i < jsonArray.length(); i++) {
Object itemObject = jsonArray.get(i);
if (null != itemObject) {
valueList.add(parseValue(itemObject));
}
} // for (int i = 0; i < jsonArray.length(); i++)
} // if (null != valueStr) return valueList;
}
}
一个强大的json解析工具类的更多相关文章
- Dubbo 泛化调用的参数解析问题及一个强大的参数解析工具 PojoUtils
排查了3个多小时,因为一个简单的错误,发现一个强大的参数解析工具,记录一下. 背景 Nodejs 通过 tether 调用 Java Dubbo 服务.请求类的某个参数对象 EsCondition 有 ...
- 一个.NET通用JSON解析/构建类的实…
一个.NET通用JSON解析/构建类的实现(c#) 在.NET Framework 3.5中已经提供了一个JSON对象的序列化工具,但是他是强类型的,必须先按JSON对象的格式定义一个类型,并将类型加 ...
- C#字符串数组排序 C#排序算法大全 C#字符串比较方法 一个.NET通用JSON解析/构建类的实现(c#) C#处理Json文件 asp.net使用Jquery+iframe传值问题
C#字符串数组排序 //排序只带字符的数组,不带数字的 private string[] aa ={ "a ", "c ", "b & ...
- 一个.NET通用JSON解析/构建类的实现(c#)转
转自:http://www.cnblogs.com/xfrog/archive/2010/04/07/1706754.html NET通用JSON解析/构建类的实现(c#) 在.NET Framewo ...
- 基于json-lib-2.2.2-jdk15.jar的JSON解析工具类大集合
json解析之前的必备工作:导入json解析必须的六个包 资源链接:百度云:链接:https://pan.baidu.com/s/1dAEQQy 密码:1v1z 代码示例: package com.s ...
- 使用json-lib-*.jar的JSON解析工具类
使用json-lib-2.4-jdk15.jar JSON工具类: import java.util.List; import net.sf.json.JSONArray; import net.sf ...
- json解析工具类
对jackson的ObjectMapper的封装: ObjectMapperUtils: import static com.fasterxml.jackson.core.JsonFactory.Fe ...
- Json解析工具Jackson(使用注解)
原文http://blog.csdn.net/nomousewch/article/details/8955796 接上一篇文章Json解析工具Jackson(简单应用),jackson在实际应用中给 ...
- Tomjson - 一个"短小精悍"的 json 解析库
Tomjson,一个"短小精悍"的 json 解析库,tomjson使用Java语言编写,主要作用是把Java对象(JavaBean)序列化为json格式字符串,将json格式字符 ...
随机推荐
- 【6.28校内test】T1 Jelly的难题1
Jelly的难题[题目链接] 废话一句:今天中考出成绩,感觉大家考的都超级棒,不管怎样,愿大家成为最好的自己. 好了废话完了,下面是题解部分: SOLUTION: 首先你可能发生的,是看不懂题: 定睛 ...
- LOJ 103 字串查找 题解
题面 这道题是KMP的模板. KMP需要注意的细节有很多,所以把这篇文章发上来供参考: #include <bits/stdc++.h> using namespace std; char ...
- laravel修改用户模块的密码验证
做项目的时候,用户认证几乎是必不可少的,如果我们的项目由于一些原因不得不使用 users 之外的用户表进行认证,那么就需要多做一点工作来完成这个功能. 现在假设我们只需要修改登录用户的表,表名和表结构 ...
- redis 无序集合 数据类型
sadd emptno 8000 sadd emptno 8001 sadd emptno 8002 smembers emptno 返回集合全部数据 scard 获取集合长度 sismem ...
- Codeforces 902 树同型构造 多项式长除法构造(辗转相除法)
A #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) #def ...
- Python核心编程正则表达式练习题1-1 识别后续的字符串:“bat”、“bit”、“but”、“hat”、“hit”或者“hut”
# 1-1 识别后续的字符串:“bat”.“bit”.“but”.“hat”.“hit”或者“hut”. import re # 正则表达式,|元字符表示选择“或” # character = 'ba ...
- #1055 ... sql_mode=only_full_group_by
sql_mode=only_full_group_by 版权声明:本文为参考多篇博主文章,略作测试修改. 参考文章: 猿医生 的<5分钟学会MySQL-this is incompatible ...
- linux shell getopt
linux shell命令行选项与参数用法详解--getopts.getopt https://www.jianshu.com/p/6393259f0a13
- java基础语法2-运算符与流程控制
关键字-标识符-常量和变量-运算符-流程控制-方法-数组 5 运算符 算术运算符Arithmetic Operators 赋值运算符Assignment Operators 比较运算符Compare ...
- 操作系统——HugePage
TLB:页表一般都很大,并且存放在内存中,所以处理器引入MMU后,读取指令.数据需要访问两次内存:首先通过查询页表得到物理地址,然后访问该物理地址读取指令.数据.为了减少因为MMU导致的处理器性能下降 ...