该工具类利用递归原理,能够将任意结构的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解析工具类的更多相关文章

  1. Dubbo 泛化调用的参数解析问题及一个强大的参数解析工具 PojoUtils

    排查了3个多小时,因为一个简单的错误,发现一个强大的参数解析工具,记录一下. 背景 Nodejs 通过 tether 调用 Java Dubbo 服务.请求类的某个参数对象 EsCondition 有 ...

  2. 一个.NET通用JSON解析/构建类的实…

    一个.NET通用JSON解析/构建类的实现(c#) 在.NET Framework 3.5中已经提供了一个JSON对象的序列化工具,但是他是强类型的,必须先按JSON对象的格式定义一个类型,并将类型加 ...

  3. C#字符串数组排序 C#排序算法大全 C#字符串比较方法 一个.NET通用JSON解析/构建类的实现(c#) C#处理Json文件 asp.net使用Jquery+iframe传值问题

    C#字符串数组排序   //排序只带字符的数组,不带数字的 private   string[]   aa   ={ "a ", "c ", "b & ...

  4. 一个.NET通用JSON解析/构建类的实现(c#)转

    转自:http://www.cnblogs.com/xfrog/archive/2010/04/07/1706754.html NET通用JSON解析/构建类的实现(c#) 在.NET Framewo ...

  5. 基于json-lib-2.2.2-jdk15.jar的JSON解析工具类大集合

    json解析之前的必备工作:导入json解析必须的六个包 资源链接:百度云:链接:https://pan.baidu.com/s/1dAEQQy 密码:1v1z 代码示例: package com.s ...

  6. 使用json-lib-*.jar的JSON解析工具类

    使用json-lib-2.4-jdk15.jar JSON工具类: import java.util.List; import net.sf.json.JSONArray; import net.sf ...

  7. json解析工具类

    对jackson的ObjectMapper的封装: ObjectMapperUtils: import static com.fasterxml.jackson.core.JsonFactory.Fe ...

  8. Json解析工具Jackson(使用注解)

    原文http://blog.csdn.net/nomousewch/article/details/8955796 接上一篇文章Json解析工具Jackson(简单应用),jackson在实际应用中给 ...

  9. Tomjson - 一个"短小精悍"的 json 解析库

    Tomjson,一个"短小精悍"的 json 解析库,tomjson使用Java语言编写,主要作用是把Java对象(JavaBean)序列化为json格式字符串,将json格式字符 ...

随机推荐

  1. PHP手册在7.1迁移页面给出了替代方案,就是用OpenSSL取代MCrypt.

    /**  * [AesSecurity aes加密,支持PHP7.1]  */ class AesSecurity {     /**      * [encrypt aes加密]      * @p ...

  2. MySQL的日志系统

    一.日志类型 逻辑日志:存储了逻辑SQL修改语句 物理日志:存储了数据被修改的值 二.binlog 1.定义 binlog 是 MySQL 的逻辑日志,也叫二进制日志.归档日志,由 MySQL Ser ...

  3. Jade学习(六)之使用html2jade反编译

    我们可以使用html2jade将html编译成jade 首先安装html2jade npm install html2jade -g 用法一:使用html2jade将html转为jade html2j ...

  4. sql修改表名字段名

    修改字段: ALTER TABLE user_info CHANGE NAME name VARCHAR(10); 修改表名alter TABLE user_role RENAME user_info ...

  5. 深入Spring Boot:那些注入不了的 Spring 占位符 ( ${} 表达式 )

    Spring里的占位符 spring里的占位符通常表现的形式是: 1 2 3 <bean id="dataSource" destroy-method="close ...

  6. setTimeout定时器

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Java中遍历Set集合的方法

    对 set 的遍历 1.迭代遍历: Set<String> set = new HashSet<String>(); Iterator<String> it = s ...

  8. AndroidStudio Gradle手动下载和安装

    操作流程概述: 下载好的压缩包和解压后的文件夹复制到gradle-5.5.1-all --->97z1ksx6lirer3kbvdnh7jtjg文件夹下,将gradle-5.5.1-all.zi ...

  9. git和svn 及git使用&解决上线冲突

    一.svn git的工作流程 git 的工作流程图 二.git的基础使用 git 的安装 1.下载对应版本:https://git-scm.com/download 2.安装git:在选取安装路径的下 ...

  10. VIM如何自动保存文件、自动重加载文件、自动刷新显示文件

    1.手动重加载文件的命令是:e! 2.一劳永逸的方法是:vim提供了自动加载的选项 autoread,默认关闭. 在vimrc中添加 set autoread即可打开自动加载选项,相关选项: :hel ...