fastjson的JSONArray轉化為泛型列表


背景:一個復雜結構體內部可能有array的數據,例如:{name:"test",cities:[{name:"shanghai",area:1,code:20010},{name:"suzhou",area:1,code:200200},...]},如果將整個結構體映射為JSONObject,那么cities的結構只能以JSONArray的結構取出來,而fastjson的JSONArray沒有提供轉換為List<T>的方法。

分析:fastjson提供了將JSONObject轉化為java類的方法,可以遍歷JSONArray,將其中的元素轉化為類的實體。

解決:

/**
     * 將 fastjson的JSONArray轉化為泛型列表
     * @param jsonArray 源數據
     * @param clz 泛型類
     * @param <T> 泛型
     * @return list
     */
    public static <T> List<T> convertJSONArrayToTypeList(JSONArray jsonArray,Class<T> clz){
        if (CollectionUtils.isEmpty(jsonArray)){
            return new ArrayList<T>();
        }
        List<T> result = new ArrayList<T>(jsonArray.size());
        jsonArray.forEach(element->{
            // 基礎類型不可以轉化為JSONObject,需要特殊處理
            if (element instanceof String
                    || element instanceof Number
                    || element instanceof Boolean
                    ){
                result.add((T)element);
            }else {
                T t = JSONObject.toJavaObject((JSONObject)element, clz);
                result.add(t);
            }
        });
        return result;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM