转换复杂的JSON对象为 Map对象
最近项目需要跟客户对接一个webservice接口,客户那传json串过来,属于比较复杂的json串,这里跟大家分享下我项目中所用的解析方法:
该方法需要以下jar

package com.test; import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map; import net.sf.json.JSONArray;
import net.sf.json.JSONObject; /**
* 描述
* @author 小当家
* @created 2017年12月7日 上午9:08:03
*/
public class TestJson { /**
*
* 描述: 转换复杂的JSON对象为 Map对象
* @author 小当家
* @created 2017年12月7日 上午9:15:12
* @param jsonStr
* @return
*/
@SuppressWarnings("unused")
private static Map<String, Object> parseJSON2Map(String jsonStr) {
Map<String, Object> map = new HashMap<String, Object>();
// 最外层解析
JSONObject json = JSONObject.fromObject(jsonStr);
for (Object k : json.keySet()) {
Object v = json.get(k);
// 如果内层还是数组的话,继续解析
if (v instanceof JSONArray) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Iterator<JSONObject> it = ((JSONArray) v).iterator();
while (it.hasNext()) {
JSONObject json2 = it.next();
list.add(parseJSON2Map(json2.toString()));
}
map.put(k.toString(), list);
} else {
map.put(k.toString(), v);
}
}
return map;
} public static void main(String[] args) {
String jsonString = "{\"payCnt\":3,\"payInfo\":[{\"payInfoMain\":{\"ordNum\":\"201206010000001\",\"transSite\":\"\",\"transBankNo\":\"TEPB\",\"bankAcctNo\":\"010\",\"totAmt\":\"30\",\"billChkCode\":\"3316\",\"tollDeptNo\":\"NDZSXH000\",\"busType\":\"FJFS\",\"other1\":\"remark1\",\"other2\":\"remark2\",\"bankName\":\"模拟银行2\",\"transSeq\":\"20120601000000001\",\"tranType\":\"\",\"siteCode\":\"200001\",\"eBillVerNo\":\"000001\",\"tollDeptName\":\"宁德市会计专业技术考试领导小组\",\"itemCnt\":1,\"tranUser\":\"\",\"payer\":\"宁德\",\"eBillNo\":\"201206010000000136\",\"transBankName\":\"模拟银行2\",\"transAcctNo\":\"010\",\"siteName\":\"国家司法考试网\",\"ordDate\":\"20120601\"},\"eBillNo\":\"201206010000000136\",\"payInfoItem\":[{\"amt\":\"30\",\"chrgStd\":\"1\",\"cnt\":\"1\",\"chrgName\":\"初级网络工程师报名费\",\"msrUint\":\"元/科\",\"chrgCode\":\"KA460001\"}]},{\"payInfoMain\":{\"ordNum\":\"201206010000001\",\"transSite\":\"\",\"transBankNo\":\"TEPB\",\"bankAcctNo\":\"010\",\"totAmt\":\"10\",\"billChkCode\":\"2258\",\"tollDeptNo\":\"777516727\",\"busType\":\"FJFS\",\"other1\":\"remark1\",\"other2\":\"remark2\",\"bankName\":\"模拟银行2\",\"transSeq\":\"20120601000000001\",\"tranType\":\"\",\"siteCode\":\"200001\",\"eBillVerNo\":\"000001\",\"tollDeptName\":\"福建省省会计管理处\",\"itemCnt\":1,\"tranUser\":\"\",\"payer\":\"缴款人\",\"eBillNo\":\"201206010000000134\",\"transBankName\":\"模拟银行2\",\"transAcctNo\":\"010\",\"siteName\":\"国家司法考试网\",\"ordDate\":\"20120601\"},\"eBillNo\":\"201206010000000134\",\"payInfoItem\":[{\"amt\":\"10\",\"chrgStd\":\"1\",\"cnt\":\"1\",\"chrgName\":\"交通罚没\",\"msrUint\":\"元/科\",\"chrgCode\":\"460\"}]},{\"payInfoMain\":{\"ordNum\":\"201206010000001\",\"transSite\":\"\",\"transBankNo\":\"TEPB\",\"bankAcctNo\":\"010\",\"totAmt\":\"20\",\"billChkCode\":\"0198\",\"tollDeptNo\":\"003604520\",\"busType\":\"FJFS\",\"other1\":\"remark1\",\"other2\":\"remark2\",\"bankName\":\"模拟银行2\",\"transSeq\":\"20120601000000001\",\"tranType\":\"\",\"siteCode\":\"200001\",\"eBillVerNo\":\"000001\",\"tollDeptName\":\"福州市财政局会计管理处\",\"itemCnt\":1,\"tranUser\":\"\",\"payer\":\"福州\",\"eBillNo\":\"201206010000000135\",\"transBankName\":\"模拟银行2\",\"transAcctNo\":\"010\",\"siteName\":\"国家司法考试网\",\"ordDate\":\"20120601\"},\"eBillNo\":\"201206010000000135\",\"payInfoItem\":[{\"amt\":\"20\",\"chrgStd\":\"1\",\"cnt\":\"1\",\"chrgName\":\"会计从业资格证考务费\",\"msrUint\":\"元/科\",\"chrgCode\":\"BA460\"}]}]}";
Map<String, Object> map= parseJSON2Map(jsonString);
System.out.println(map.get("payCnt"));//获取电子票据数目
List list = (List)map.get("payInfo");//获取电子票据信息(List类型)
Map t = (Map)list.get(0);//获取第一行记录,Map类型
Map mainMap = (Map)t.get("payInfoMain");//获取电子票据主要信息,Map类型
String user = (String)mainMap.get("payer");//取出缴款人
System.out.println(user); }
}
经过测试后台打印:3 宁德
转换复杂的JSON对象为 Map对象的更多相关文章
- Python中的常用内置对象之map对象
如果你了解云计算的最重要的计算框架Mapreduce,你就对Python提供的map和reduce对象有很好的理解,在大数据面前,单机计算愈加力不从心,分布式计算也就是后来的云计算的框架担当大任,它提 ...
- JavaBean对象与Map对象互相转化
/** * 使用org.apache.commons.beanutils进行转换 */ class A { public static Object mapToObject(Map<String ...
- java对象与map对象相互转换
/** * 使用org.apache.commons.beanutils进行转换 */ class A { public static Object mapToObject(Map<String ...
- 处理 WebService 中的 Map 对象
最近,我们讨论了关于 WebService 的相关问题.目前在 Smart 中,可发布两种类型的 WebService,它们是:SOAP 服务 与 REST 服务,您可以根据需要自由选择. 今天,我要 ...
- JavaScript 对象Array,Map,Set使用
for(int i = 0 :i < 3 ;i++ ){ //[重点说三遍] 在说明每个对象的用法之前,首先说明 JavaScript 对象的使用一定要注意浏览器的兼容性问题!尤其是IE的版本! ...
- JSON字符串与Map互转
//一.map转为json字符串 public static String map2jsonstr(Map<String,?> map){ return JSONObject.toJSON ...
- 用jackson包实现json、对象、Map之间的转换
jackson API的使用 用jackson包实现json.对象.Map之间的转换
- java中将数组、对象、Map、List转换成JSON数据
如果要将数组.对象.Map.List转换成JSON数据,那我们需要一些jar包: json-lib-2.4-jdk15.jar ezmorph-1.0.6.jar commons-logging.ja ...
- 将java中Map对象转为有相同属性的类对象(json作为中间转换)
java中Map对象转为有相同属性的类对象(json作为中间转换) 准备好json转换工具类 public class JsonUtil { private static ObjectMapper o ...
随机推荐
- Qt应用开发常见问题
Qt判断当前操作系统? 可使用宏判断,例如: #ifdef Q_OS_MAC //mac ... #endif #ifdef Q_OS_LINUX //linux ... #endif #ifdef ...
- jiagu-工具使用
比较好的一套处理工具吧,感谢作者,原文地址:https://github.com/ownthink/Jiagu 练习一下使用 """ Funciton: jiagu测试 ...
- 记一次node节点异常排查
一.背景 公司进行kubernetes服务重启演练,集群重启后所有服务正常,仅node2节点处于notready状态 二.排查过程 查看对应节点的详细信息,发现kubelet一直处于starting状 ...
- Scala Operators, File & RegExp
Operators Thread.`yield`() 反引号除了用于命名标识符,还可以在调用方法时避免冲突(yield 为 Scala 关键字,但也是 Thread 的方法) 中缀运算符(infix ...
- 9. Scala隐式转换和隐式值
9.1 隐式转换 9.1.1 提出问题 先看一个案例演示,引出隐式转换的实际需要=>指定某些数据类型的相互转化 object boke_demo01 { def main(args: Array ...
- .net平台下对C#代码的编译
最近赶项目忽然想到一个问题,那就是在 .Net平台下的C#代码是怎么从源代码到机器可以识别的电脑的(只怪自己上学不好好读书,现在又要重补一遍了!!!) 话不多说直接上调研结果: 预习知识: 1: IL ...
- Python中的单例设计
01. 单例设计模式 设计模式 设计模式 是 前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对 某一特定问题 的成熟的解决方案 使用 设计模式 是为了可重用代码.让代码更容易被他人理解.保 ...
- 在win10、Ubuntu双系统下,卸载Ubuntu
一.Win下确定ubuntu的磁盘分区 这个步骤是为了删除Ubuntu的系统分区,这种直接删除的方式来重新安装ubuntu的低版本比较省事. (1)右键计算机->管理->磁盘管理,打开磁盘 ...
- Java语言的介绍
1. 计算机语言 语言:沟通交流的方式 计算机语言:人与计算机之间的交流方式 java是一门计算机编程语言,也是意大利自行车品牌 软件工程师,java开发工程师 <--------------- ...
- 记一则 Lambda内递归调用方法将集合对象转换成树形结构
public dynamic GetDepartments(string labID) { List<int> usedIDs = new List<int>(); //缓存已 ...