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 类,包含 name 和 age 两个属性,以及对应的 getter 和 setter 方法。

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 类的属性名不匹配,可能需要进行额外的配置或处理。
相关推荐
赵小哥要冲啦4 小时前
社区邻里互助小程序从 0 到 1 复盘:需求拆解与信任机制设计
java·小程序·需求分析
xiaogai_gai4 小时前
采购业务退款单同步实战:从钉钉审批流到金蝶云星空付款单
java·数据库·钉钉
二哈赛车手4 小时前
新人笔记---hermes定时功能设计,具体讲解以及可优化点
java·人工智能·笔记·spring·ai·typescript
ZWZhangYu4 小时前
从 Dify 实践理解大模型上下文缓存
java·后端·spring
小熊恋旧4 小时前
Python 面向对象编程:方法、属性、继承与多态详解
开发语言·python
云边云科技_云网融合4 小时前
面向汽车零部件制造业场景的解决方案 | 70 秒:一台车下线的时间里,藏着五张网
开发语言·汽车·php
Evand J4 小时前
【PMSM滤波例程2】PMSM未知负载转矩观测EKF。MATLAB例程(负载增广EKF与实际仿真结果)。附下载链接
开发语言·matlab·电机
小羊没烦恼!5 小时前
关于分布式锁原理的一些学习与思考-redis分布式锁,zookeeper分布式锁
java·服务器·网络·学习·负载均衡
will_net5 小时前
apollo 站点部署&C#接入
开发语言·c#·apollo
晗夜未央5 小时前
任务队列反复失败,先分清重试、阻塞和结果待核对
开发语言·javascript