【转载】Java 复杂json对象转Map

转自: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>

接下来直接上代码,可以封装成自己的工具类:

  1. 第一种方式(已封装成工具类)

    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; }
    
  2. 第二种方式

      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; } 

猜你喜欢

转载自blog.csdn.net/beidaol/article/details/85792679
今日推荐