Java List<JSONObject> 中的数据转换为 List<T>

从方法的功能推测,T 应该是一个具体的 Java Bean 类型,用于将 List<JSONObject> 中的数据转换为 List<T>。以下为你详细介绍如何传递泛型 T 以及如何实现该方法。

java 复制代码
import com.alibaba.fastjson.JSONObject;
import java.util.ArrayList;
import java.util.List;

// 定义一个通用的转换方法
public class GenericConverter {
    public static <T> List<T> convertParamsBean(Class<T> clazz, List<JSONObject> jsonObjectList) {
        List<T> resultList = new ArrayList<>();
        for (JSONObject jsonObject : jsonObjectList) {
            try {
                // 使用 FastJSON 将 JSONObject 转换为指定类型的对象
                T instance = JSONObject.toJavaObject(jsonObject, clazz);
                resultList.add(instance);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return resultList;
    }
}

// 定义一个示例 Bean 类
class ExampleBean {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "ExampleBean{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class Main {
    public static void main(String[] args) {
        List<JSONObject> jsonObjectList = new ArrayList<>();

        // 创建示例 JSONObject
        JSONObject jsonObject1 = new JSONObject();
        jsonObject1.put("name", "Alice");
        jsonObject1.put("age", 25);
        jsonObjectList.add(jsonObject1);

        JSONObject jsonObject2 = new JSONObject();
        jsonObject2.put("name", "Bob");
        jsonObject2.put("age", 30);
        jsonObjectList.add(jsonObject2);

        // 调用转换方法,传递 ExampleBean 类的 Class 对象
        List<ExampleBean> exampleBeanList = GenericConverter.convertParamsBean(ExampleBean.class, jsonObjectList);

        // 打印转换后的结果
        for (ExampleBean bean : exampleBeanList) {
            System.out.println(bean);
        }
    }
}

代码解释

convertParamsBean 方法

  • 该方法使用了泛型 <T>,接收一个 Class<T> 类型的参数 clazz 和一个 List<JSONObject> 类型的参数 jsonObjectList
  • 遍历 jsonObjectList,使用 JSONObject.toJavaObject 方法将每个 JSONObject 转换为 clazz 所代表的类型的对象。
  • 将转换后的对象添加到 resultList 中,并最终返回该列表。

ExampleBean

这是一个示例的 Java Bean 类,包含 nameage 两个属性,以及对应的 gettersetter 方法。

Main 类的 main 方法

  • 创建一个 List<JSONObject> 并添加两个示例 JSONObject
  • 调用 GenericConverter.convertParamsBean 方法,传递 ExampleBean.class 作为 clazz 参数,将 List<JSONObject> 转换为 List<ExampleBean>
  • 遍历并打印转换后的 List<ExampleBean>

传递泛型 T的方式

在调用 convertParamsBean 方法时,需要传递具体的 Java Bean 类的 Class 对象,例如 ExampleBean.class。这样,方法内部就可以使用这个 Class 对象来创建相应类型的实例,并将 JSONObject 中的数据填充到实例中。

注意事项

  • 要确保使用的 JSON 处理库(如 FastJSON)已经正确添加到项目依赖中。
  • 目标 Java Bean 类必须有默认的无参构造函数,因为 toJavaObject 方法会使用反射创建对象。
  • 如果 JSONObject 中的字段名与 Java Bean 类的属性名不匹配,可能需要进行额外的配置或处理。
相关推荐
cui_win18 小时前
Redis 连接池被占满(泄漏)问题排查
java·redis·连接泄露
Doris_LMS18 小时前
JDK11的安装教程
java·jdk
JIngJaneIL18 小时前
基于java+ vue建筑材料管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
一 乐18 小时前
办公系统|基于springboot + vueOA办公管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·spring
半梅芒果干18 小时前
vue3 新建文件store自动导入
开发语言·前端·javascript
Tony Bai18 小时前
Go 1.26 新特性前瞻:从 Green Tea GC 到语法糖 new(expr),性能与体验的双重进化
开发语言·后端·golang
多则惑少则明18 小时前
AI大模型实用(五)Java快速实现智能体整理(LangChain4j构建Java AI智能体)
java·ai大模型
uup18 小时前
字符串比较的经典坑:== vs equals
java
悟能不能悟18 小时前
Java 中将 List 中对象的某一列转换为 Set
java·开发语言·list
vortex518 小时前
Bash Shell 的展开与补全机制
开发语言·bash