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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • extremeDB_shiro使用详解

    extremeDB_shiro使用详解1、准备工作:下载eXtremeDB安装包(http://www.leadingtek.com.cn/)然后将安装或解压至磁盘。此时可以看到其目录下有host、include、platform和target等目录。2、用你喜欢的文本编辑器构建一数据库结构,文本内容如下:(举例说明,保存文件名为test.mco)#defineint1    signed#definein

    2022年10月10日
    0
  • 网盘资料

    网盘资料

    2021年10月9日
    47
  • strsep的作用

    strsep的作用在下面这个code中通过strsep将p表示的字符串一“,”分开,例如12,34,56.会先返回12,然后是34,最后是56while((id=strsep(&p,”,”)))我们看看strsep的实现char*strsep(char**s,constchar*ct){   char*sbegin=*s;   char*end;  

    2025年6月26日
    0
  • 前端程序员简历模板整理和下载

    前端程序员简历模板整理和下载大家好,我是漫步端午安康,今天晚上抽奖了,去看看参与一下吧。昨天分享了关于制作简历的一些建议,总的来说有这几个方面要点要记住:排版工整:不要出现错别字,版面清晰,段落自然,字体适中,简洁工…

    2022年10月7日
    0
  • 关于c++杀线程函数TerminateThread强烈不建议使用

     TerminateThread强烈不建议使用,因为这个函数的执行是异步的,你无法保证调用之后会立即退出,同时线程的堆栈均不会被销毁,导致内存泄露。如果调用了这个函数,请确保使用WaitForSingleObject来等待线程对象的结束。  参考链接:https://blog.csdn.net/kofandlizi/article/details/6458011https…

    2022年4月4日
    87
  • ringbuffer的常规用法_ring up

    ringbuffer的常规用法_ring up自己的slam车关于ros和stm32控制板的通信部分,之前一直使用rosserial_python包,前段时间重新编写了上、下位机的通信程序,本篇只对数据的RingBuffer做点总结。由于是用于串口的帧数据传输,为保证每帧数据完整性,采用字节入队和出队的方式实现,测试结果也比较稳定。classRingBuffer{      public:      RingBuff…

    2022年9月10日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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