前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >复杂json转MAP对象

复杂json转MAP对象

作者头像
全栈程序员站长
发布2022-07-04 13:35:15
1.8K0
发布2022-07-04 13:35:15
举报
文章被收录于专栏:全栈程序员必看

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

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

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

直接上java代码了:

代码语言:javascript
复制
public class JsonUtils {
代码语言:javascript
复制
 /** 
	  *<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));  
			}  
	} 
代码语言:javascript
复制
}

调用如下即可看到效果:

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档