转自:/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; }