fastjson转换json格式数据为List转换异常问题

在作crm任务分发系统中的【批量修改任务工单的选项】问题时,须要对接口数据进行处理,接口数据举例以下,  java

[
    {
        "title": "使用状况",
        "options": [
            {
                "name": "好",
                "value": 1
            },
            {
                "name": "很差",
                "value": 2
            },
            {
                "name": "还行",
                "value": 3
            }
        ]
    },
    {
        "title": "优化状况",
        "options": [
            {
                "name": "好",
                "value": 1
            },
            {
                "name": "很差",
                "value": 2
            },
            {
                "name": "还行",
                "value": 3
            }
        ]
    }
]


注意,options里是个array或者list 。 json

虽然结构复杂,可是也算清晰。一开始想用JSONArray.parseArray(jsondataHashMap.class)转化为以一个List<HashMap>,而后再取得每一个HashMap,每一个HashMap中又是一个List<HashMap>,而后再遍历取得HashMap。 函数

可是就在第二次遍历list的时候出现了异常, 优化

  1. for(HashMap configData : configDataList ){          //这行出错    
  2.     int value = (Integer)configData.get("value");    
  3. }    

结果运行发现有错,错误信息以下:  spa

 Exception in thread “ java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to java.util.HashMap     接口



跟踪发现,那个地方其实包含的是个JSONArray,因此cast出错。 解决方法,对应json格式的数据,写出对应的java bean,而后再来反序列化。 ci

 不过因为只有一个调用,没有必要再添加一个bean,因此本身写了一个处理函数,目的是要让fastjson处理后,获得的结果里再也不有com.alibaba.fastjson包下的类型:  get

// 将jsonString转化为hashmap
    private HashMap<String, Object> fromJson2Map(String jsonString) {
        HashMap jsonMap = JSON.parseObject(jsonString, HashMap.class);
 
        HashMap<String, Object> resultMap = new HashMap<String, Object>();
        for(Iterator iter = jsonMap.keySet().iterator(); iter.hasNext();){
            String key = (String)iter.next();
            if(jsonMap.get(key) instanceof JSONArray){
                JSONArray jsonArray = (JSONArray)jsonMap.get(key);
                List list = handleJSONArray(jsonArray);
                resultMap.put(key, list);
            }else{
                resultMap.put(key, jsonMap.get(key));
            }
        }
        return resultMap;
    }
    private  List<HashMap<String, Object>> handleJSONArray(JSONArray jsonArray){
        List list = new ArrayList();
        for (Object object : jsonArray) {
            JSONObject jsonObject = (JSONObject) object;
            HashMap map = new HashMap<String, Object>();
            for (Map.Entry entry : jsonObject.entrySet()) {
                if(entry.getValue() instanceof  JSONArray){
                    map.put((String)entry.getKey(), handleJSONArray((JSONArray)entry.getValue()));
                }else{
                    map.put((String)entry.getKey(), entry.getValue());
                }
            }
            list.add(map);
        }
        return list;
    }
相关文章
相关标签/搜索