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 类的属性名不匹配,可能需要进行额外的配置或处理。
相关推荐
测试员周周4 小时前
【Appium 系列】第16节-WebView-H5上下文切换 — 混合应用的自动化难点
运维·开发语言·人工智能·功能测试·appium·自动化·测试用例
Mahir086 小时前
Spring 循环依赖深度解密:从问题本质到三级缓存源码级解析
java·后端·spring·缓存·面试·循环依赖·三级缓存
杜子不疼.6 小时前
【C++ AI 大模型接入 SDK】 - DeepSeek 模型接入(上)
开发语言·c++·chatgpt
加号36 小时前
【C#】 串口通信技术深度解析及实现
开发语言·c#
sycmancia7 小时前
Qt——编辑交互功能的实现
开发语言·qt
RyFit7 小时前
SpringAI 常见问题及解决方案大全
java·ai
石山代码7 小时前
C++ 内存分区 堆区
java·开发语言·c++
绝知此事8 小时前
【算法突围 01】线性结构与哈希表:后端开发的收纳术
java·数据结构·算法·面试·jdk·散列表
无风听海8 小时前
C# 隐式转换深度解析
java·开发语言·c#
一只大袋鼠8 小时前
Git 进阶(二):分支管理、暂存栈、远程仓库与多人协作
java·开发语言·git