一个强大的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格式字符 ...
随机推荐
- PHP手册在7.1迁移页面给出了替代方案,就是用OpenSSL取代MCrypt.
/** * [AesSecurity aes加密,支持PHP7.1] */ class AesSecurity { /** * [encrypt aes加密] * @p ...
- MySQL的日志系统
一.日志类型 逻辑日志:存储了逻辑SQL修改语句 物理日志:存储了数据被修改的值 二.binlog 1.定义 binlog 是 MySQL 的逻辑日志,也叫二进制日志.归档日志,由 MySQL Ser ...
- Jade学习(六)之使用html2jade反编译
我们可以使用html2jade将html编译成jade 首先安装html2jade npm install html2jade -g 用法一:使用html2jade将html转为jade html2j ...
- sql修改表名字段名
修改字段: ALTER TABLE user_info CHANGE NAME name VARCHAR(10); 修改表名alter TABLE user_role RENAME user_info ...
- 深入Spring Boot:那些注入不了的 Spring 占位符 ( ${} 表达式 )
Spring里的占位符 spring里的占位符通常表现的形式是: 1 2 3 <bean id="dataSource" destroy-method="close ...
- setTimeout定时器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Java中遍历Set集合的方法
对 set 的遍历 1.迭代遍历: Set<String> set = new HashSet<String>(); Iterator<String> it = s ...
- AndroidStudio Gradle手动下载和安装
操作流程概述: 下载好的压缩包和解压后的文件夹复制到gradle-5.5.1-all --->97z1ksx6lirer3kbvdnh7jtjg文件夹下,将gradle-5.5.1-all.zi ...
- git和svn 及git使用&解决上线冲突
一.svn git的工作流程 git 的工作流程图 二.git的基础使用 git 的安装 1.下载对应版本:https://git-scm.com/download 2.安装git:在选取安装路径的下 ...
- VIM如何自动保存文件、自动重加载文件、自动刷新显示文件
1.手动重加载文件的命令是:e! 2.一劳永逸的方法是:vim提供了自动加载的选项 autoread,默认关闭. 在vimrc中添加 set autoread即可打开自动加载选项,相关选项: :hel ...