复杂json转MAP对象

普通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 json2MapString json) {  
		LinkedMap map = new LinkedMap);  
		JSONObject js = JSONObject.fromObjectjson);  
		populatejs, map);  
		return map;  
	}  

	/**
	  *<p>类描述:json中的键值对解析成map。</p>
	 */
	private static Map populateJSONObject jsonObject, Map map) { 
		for Iterator iterator = jsonObject.entrySet).iterator); iterator  
				.hasNext);) {  
			String entryStr = String.valueOfiterator.next));  
			String key = entryStr.substring0, entryStr.indexOf"="));  
			String value = entryStr.substringentryStr.indexOf"=") + 1,  
					entryStr.length));  
			if jsonObject.getkey).getClass).equalsJSONObject.class)) {  
				HashMap _map = new HashMap);  
				map.putkey, _map);  
				populatejsonObject.getJSONObjectkey), Map) _map)));  
			} else if jsonObject.getkey).getClass).equalsJSONArray.class)) {  
				ArrayList list = new ArrayList);  
				map.putkey, list);  
				populateArrayjsonObject.getJSONArraykey), list);  
			} else {  
				map.putkey, jsonObject.getkey));  
			}  
		}  

		return map;  
	}  

	/**
	  *<p>类描述:如果是键对应数组,则返回一个list到上级的map里。</p>
	 */
	private static void populateArrayJSONArray jsonArray, List list) {  
		for int i = 0; i < jsonArray.size); i++)  
			if jsonArray.geti).getClass).equalsJSONArray.class)) {  
				ArrayList _list = new ArrayList);  
				list.add_list);  
				populateArrayjsonArray.getJSONArrayi), _list);  
			} else if jsonArray.geti).getClass).equalsJSONObject.class)) {  
				HashMap _map = new HashMap);  
				list.add_map);  
				populatejsonArray.getJSONObjecti), _map);  
			} else {  
				list.addjsonArray.geti));  
			}  
	} 
}

调用如下即可看到效果:

Map map = JsonUtils.json2Mapjson.toString));

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

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

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