fastjson的JSONArray转化为泛型列表

背景:一个复杂结构体内部可能有array的数据,例如:{name:"test",cities:[{name:"shanghai",area:1,code:20010},{name:"suzhou",area:1,code:200200},...]},如果将整个结构体映射为JSONObject,那么cities的结构只能以JSONArray的结构取出来,而fastjson的JSONArray没有提供转换为List的方法。

分析:fastjson提供了将JSONObject转化为java类的方法,可以遍历JSONArray,将其中的元素转化为类的实体。

解决:

/**
     * 将 fastjson的JSONArray转化为泛型列表
     * @param jsonArray 源数据
     * @param clz 泛型类
     * @param  泛型
     * @return list
     */
    public static  List convertJSONArrayToTypeList(JSONArray jsonArray,Class clz){
        if (CollectionUtils.isEmpty(jsonArray)){
            return new ArrayList();
        }
        List result = new ArrayList(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;
    }

 

转载于:https://www.cnblogs.com/yucy/p/9067038.html

你可能感兴趣的:(json,java)