转自:http://zhangruibin.com/article/json2map.html
怎样将复杂的json对象转化成Map? 这就涉及了一点,是否存储最次级子节点的KEY和Value为Map的K_V, 本文中介绍两种搜集的发解决办法。都是存储最底层子节点作为K_V,可以根据自己的json形式进行特殊处理。 首先说下使用到的外部包com.alibaba.fastjson.JSONObject; Maven中增加依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
接下来直接上代码,可以封装成自己的工具类:
-
第一种方式(已封装成工具类)
private static Map JsonToMap(Stack<JSONObject> stObj, Map<String, Object> resultMap) throws Exception { if (stObj == null && stObj.pop() == null) { return null; } JSONObject json = stObj.pop(); Set<String> strings = json.keySet(); Iterator it = strings.iterator(); while (it.hasNext()) { String key = (String) it.next(); //得到value的值 Object value = json.get(key); if (value instanceof JSONObject) { stObj.push((JSONObject) value); //递归遍历 JsonToMap(stObj, resultMap); } else { resultMap.put(key, value); } } return resultMap; }
-
第二种方式
private static Map<String, Object> parseJSON2Map(String jsonStr) { Map<String, Object> map = new HashMap<String, Object>(); // 最外层解析 JSONObject json = JSONObject.fromObject(jsonStr); for (Object key : json.keySet()) { Object value = json.get(key); // 判断内层对象类型,如果还是数组的话,继续解析 if (value instanceof JSONArray) { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); Iterator<JSONObject> it = ((JSONArray) value).iterator(); while (it.hasNext()) { JSONObject json2 = it.next(); list.add(parseJSON2Map(json2.toString())); } map.put(key.toString(), list); } else { map.put(key.toString(),value); } } return map; }