复杂json转MAP对象

复杂json转MAP对象普通json对象或者字符串转换map或者实体就不说了,这里主要提供复杂json转map的方法,直接上java代码了:publicclassJsonUtils{ /** *类描述:复杂json字符串转换为Map,包含数组时value为List。 */ publicstaticMapjson2Map(Stringjson){ LinkedMap

大家好,又见面了,我是你们的朋友全栈君。

普通json对象或者字符串转换map或者实体就不说了,这里主要提供复杂json 转map的方法

复杂json例如:String str=”{aaa:test,key:[\”A\”,\”B\”,\”C\”],val:[\”1111\”,\”2222\”,\”333\”]}”,某些key对应的value包含json数组

直接上java代码了:

public class JsonUtils {
 /** 
	  *<p>类描述:复杂json字符串转换为Map,包含数组时value为List。</p>
	 */
	public static Map json2Map(String json) {  
		LinkedMap map = new LinkedMap();  
		JSONObject js = JSONObject.fromObject(json);  
		populate(js, map);  
		return map;  
	}  

	/**
	  *<p>类描述:json中的键值对解析成map。</p>
	 */
	private static Map populate(JSONObject jsonObject, Map map) { 
		for (Iterator iterator = jsonObject.entrySet().iterator(); iterator  
				.hasNext();) {  
			String entryStr = String.valueOf(iterator.next());  
			String key = entryStr.substring(0, entryStr.indexOf("="));  
			String value = entryStr.substring(entryStr.indexOf("=") + 1,  
					entryStr.length());  
			if (jsonObject.get(key).getClass().equals(JSONObject.class)) {  
				HashMap _map = new HashMap();  
				map.put(key, _map);  
				populate(jsonObject.getJSONObject(key), ((Map) (_map)));  
			} else if (jsonObject.get(key).getClass().equals(JSONArray.class)) {  
				ArrayList list = new ArrayList();  
				map.put(key, list);  
				populateArray(jsonObject.getJSONArray(key), list);  
			} else {  
				map.put(key, jsonObject.get(key));  
			}  
		}  

		return map;  
	}  

	/**
	  *<p>类描述:如果是键对应数组,则返回一个list到上级的map里。</p>
	 */
	private static void populateArray(JSONArray jsonArray, List list) {  
		for (int i = 0; i < jsonArray.size(); i++)  
			if (jsonArray.get(i).getClass().equals(JSONArray.class)) {  
				ArrayList _list = new ArrayList();  
				list.add(_list);  
				populateArray(jsonArray.getJSONArray(i), _list);  
			} else if (jsonArray.get(i).getClass().equals(JSONObject.class)) {  
				HashMap _map = new HashMap();  
				list.add(_map);  
				populate(jsonArray.getJSONObject(i), _map);  
			} else {  
				list.add(jsonArray.get(i));  
			}  
	} 
}

调用如下即可看到效果:

Map map = JsonUtils.json2Map(json.toString());

方法详细解释在这里:http://blog.csdn.net/haqer0825/article/details/9708293

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/149427.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • c++中decltype_find的用法归纳

    c++中decltype_find的用法归纳1.什么是decltypedecltype是C++11新增的一个关键字,和auto的功能一样,用来在编译时期进行自动类型推导。引入decltype是因为auto并不适用于所有的自动类型推导场景,在某些特殊情况下auto用起来很不方便,甚至压根无法使用。autovarName=value;decltype(exp)varName=value;auto根据=右边的初始值推导出变量的类型,decltype根据exp表达式推导出变量的类型,跟=右边的value没有关系…

  • 60mph和kmh换算_100mph等于多少kmh

    60mph和kmh换算_100mph等于多少kmh等于163.93公里每小时,Mph是属于英国的速度换算率,和我国所使用的Km/h有所区分,我国使用的这种方式为公制的速度换算率,而在美国、英国以及一些英联邦国家,所采用的计算速度方式,都是使用的mph。什么是MPH就是以一个速度计量单位,能够表示出每小时多少英里,也就是我们在行驶车辆的时候,车辆所行驶的速度,会被称为多少迈,按照换算比率,一迈等于1.609344千米每小时。全称为mileper…

  • 常见电子元器件的常用品牌汇总

    ​抽时间汇总了一些常见电子元器件常用品牌,大家在元器件选型时可以参考。电阻:Yageo国巨、Uniohm厚声、Walsin华新科、Fenghua风华、Ralec旺诠、KOA兴亚、Panasonic松下、AVX、Rohm罗姆、Samsung三星、TDK、TMTEC泰铭、Kyocera京瓷、PHYCOM飞元。电容:Yageo国巨、Samsung三星、Eyang宇阳、Murata村田、Taiyo太诱、Fenghua风华、Kyocera京瓷、HEC禾伸堂、Kemet基美、ISND华信安、AVX、TDK、Nich

  • 王者荣耀最低战力查询-王者战区修改[通俗易懂]

    王者荣耀最低战力查询-王者战区修改

  • RTP协议分析

    RTP协议分析整理记录版本时间内容整理人

  • mcu单片机开发_AVR单片机

    mcu单片机开发_AVR单片机关于单片机(MCU)最强科普

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号