复杂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)


相关推荐

  • redis 命令参考手册_redis登录命令

    redis 命令参考手册_redis登录命令http://redisdoc.com/index.htmlhttp://doc.redisfans.com

  • java删除数组中指定元素_java学习中如何删除数组中的指定元素「建议收藏」

    java删除数组中指定元素_java学习中如何删除数组中的指定元素「建议收藏」java的api中,并没有提供删除数组中元素的方法。虽然数组是一个对象,不过并没有提供add()remove()或查找元素的方法。这就是为什么类似ArrayList和HashSet受欢迎的原因。不过,我们要感谢ApacheCommonsUtils,我们可以使用这个库的ArrayUtils类来轻易的删除数组中的元素。不过有一点需要注意,数组是在大小是固定的,这意味这我们删除元素后,并不会减少数组的…

  • c语言图书管理系统出现的问题,C语言图书管理系统中的问题「建议收藏」

    c语言图书管理系统出现的问题,C语言图书管理系统中的问题「建议收藏」系统使用细分的功能模块c语言图书管理系统,分别在main.c文件中调用.开发环境为Win7,Netbeans8.0.2这是main.c#include#include#include#include“bmenu.h”#include“search_allinformation.h”typedefstructbookinfo{字符数[20];/*书号*/字符名称[40];/*书…

    2022年10月11日
  • 计算经纬度的距离_经纬度测距

    计算经纬度的距离_经纬度测距PHP根据经纬度坐标计算距离在有些应用中需要用到计算距离的功能,例如附近的商家、离我最近等功能。W为纬度对应的弧度,J为经度对应的弧度,如上图所示下面代码lat是纬度lng是经度看类代码/***根据经纬度算距离,返回结果单位是公里,先纬度,后经度*@param$lat1*@param$lng1*@param$lat2*@param$lng2*@returnfloat|…

  • datax(6):启动步骤解析

    datax(6):启动步骤解析通过前面datax(2):通过idea搭建源码阅读+调试环境已经知道了idea下阅读源码的步骤,现在看下DataX启动步骤解析一,启动java类(主入口)/***Engine是DataX入口类,该类负责初始化Job或者Task的运行容器,并运行插件的Job或者Task逻辑*/com.alibaba.datax.core.Engine二,启动的步骤1、解析配置,包括job.json、core.json、plugin.json三个配置2、设置jobId到config.

  • java爬虫实现

    java爬虫实现爬虫入门手写一个Java爬虫本文内容 涞源于 罗刚 老师的 书籍&lt;&lt;自己动手写网络爬虫一书&gt;&gt;;本文将介绍1:网络爬虫的是做什么的? 2: 手动写一个简单的网络爬虫;1: 网络爬虫是做什么的? 他的主要工作就是跟据指定的url地址 去发送请求,获得响应, 然后解析响应, 一方面从响应中查找出想要查找的数据,另一方面从响应中解析出新的URL…

发表回复

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

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