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;
    }
相關文章
相關標籤/搜索