首页 > 编程语言 >Java 将JSON数组转成List对象集合

Java 将JSON数组转成List对象集合

时间:2023-11-28 09:56:02浏览次数:41  
标签:return String List private JSON str Java

 一、从对象列表中提取并组装 JSON字段的数据:(工具类)

public class JsonMsgUtils<T> {

    /**
     * 从对象列表中提取并组装 JSON 字段的数据。
     *
     * @param logs             包含对象的列表
     * @param targetClass      目标对象类型,表示 JSON 消息的结构
     * @param jsonMsgFieldName JSON 字段的名称
     * @return 组装后的 JSON 消息数据列表
     */
    public static <T> List<T> extractAndCombineJsonMsg(List<?> logs, Class<T> targetClass, String jsonMsgFieldName) {
        List<T> result = new ArrayList<>();

        for (Object log : logs) {
            try {
                // 使用反射获取jsonMsg字段的值
                Method getterMethod = log.getClass().getMethod("get" + capitalize(jsonMsgFieldName));
                Object jsonMsgValue = getterMethod.invoke(log);

                if (jsonMsgValue != null) {
                    Type jsonMsgListType = TypeToken.getParameterized(List.class, targetClass).getType();
                    List<T> parsedJsonMsgList = new Gson().fromJson(jsonMsgValue.toString(), jsonMsgListType);
                    result.addAll(parsedJsonMsgList);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        return result;
    }

    private static String formatLocalDateTime(LocalDateTime localDateTime) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        return localDateTime.format(formatter);
    }

    /**
     * 将字符串的首字母转换为大写。
     *
     * @param str 待转换的字符串
     * @return 转换后的字符串
     */
    private static String capitalize(String str) {
        if (str == null || str.isEmpty()) {
            return str;
        }
        return Character.toUpperCase(str.charAt(0)) + str.substring(1);
    }
}

 

二、封装组装后的 JSON 数据的类(你们可以根据自己的字段定义)

(1)、数据库JSON字段如下:

 (2)、定义组装后的对象:

/**
 * 封装组装后的 JSON 数据的类
 * @author FengQing
 * @program yf-client
 * @description
 * @date 2023/11/25
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class AssembledJsonMsg {

    /**
     * 字段名称
     */
    private String fieldName;

    /**
     * 修改后的值
     */
    private String newBean;

    /**
     * 修改前的值
     */
    private String oldBean;

    /**
     * 修改时间
     */
    private String updateTime;

    /**
     * 操作用户名
     */
    private String userName;
}

 

三、在业务处理要组装的数据:调用(extractAndCombineJsonMsg)工具类;

以下是个简单的示例

 /**
     * 根据条件查询操作日志记录列表
     * @param params
     * @return
     */
    @Override
    public List<AssembledJsonMsg> selectChannelLogList(Map<String, Object> params) {
        LambdaQueryWrapper<ChannelLog> wrapper = Wrappers.lambdaQuery();
        wrapper.eq(params.get("channelId") != null, ChannelLog::getChannelId, params.get("channelId"))
        .orderByDesc(ChannelLog::getId);
        List<ChannelLog> list = super.list(wrapper);
        List<AssembledJsonMsg> jsonMsgList = JsonMsgUtils.extractAndCombineJsonMsg(list, AssembledJsonMsg.class, "jsonMsg");
        return jsonMsgList;
    }

 

效果如下:

{
    "code": 0,
    "msg": "操作成功",
    "data": [
        {
            "fieldName": "公司名称",
            "newBean": "测试有限公司",
            "oldBean": "测试有限公司001",
            "updateTime": "2023-11-27 13:47:40",
            "userName": "管理员"
        },
        {
            "fieldName": "分类",
            "newBean": "0,2,1",
            "oldBean": "0,2",
            "updateTime": "2023-11-27 13:47:11",
            "userName": "管理员"
        }
    ]
}

 

标签:return,String,List,private,JSON,str,Java
From: https://www.cnblogs.com/springclout/p/17861191.html

相关文章

  • Java并发编程:面向对象思想与并发编程思想的融合
    1.封装共享变量1.1识别可变化与不变的共享变量识别可变化与不可变化的共享变量。针对初始化后不再改变的变量,可以添加final修饰。不仅编译器编译更快,也对后续开发人员指明了变量属性,更防范了意想不到的修改行为。1.2针对可变化的共享变量,进行封装处理针对共享变量的访问,若......
  • Java实现并行功能
    Java8线程池异步处理-->针对小包大MyTask 类中的 compute() 方法首先检查任务的规模是否小于等于1。如果是,它直接返回任务的结果。否则,它将任务拆分成两个子任务(leftTask 和 rightTask),并使用 fork() 方法将它们提交到 ForkJoinPool 中执行。这里定义了一个名为 My......
  • java System
    packagenet.elaina.system;publicclassTest1{publicstaticvoidmain(String[]args){/*publicstaticvoidexit(intstatus)终止当前运行的Java虚拟机publicstaticlongcurrentTimeMillis()返回当前系统的时间毫秒值形式p......
  • 支持修改键值的优先队列(以C++,Java为例)
    #include<queue>#include<functional>template<typenameT1,typenameT2>classmutable_priority_queue;template<typenameT1,typenameT2>classmutable_priority_queue{private:std::function<bool(conststd::pair<T1,T......
  • Java的Buffer流输入封装类
    importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.util.StringTokenizer;classQuickReader{privatefinalBufferedReaderbufferedReader=newBufferedReader(newInputStreamReader(System.in));......
  • 八股文-Java方法的重载与重写
    在Java中,重载和重写是两个关键的面向对象编程概念。重载通过方法的参数列表不同来区分同名方法,提供了更灵活的方法调用方式。而重写通过子类重新定义父类中已经存在的方法,实现了多态性的体现,让代码更具可扩展性和维护性。重载(Overloading)重载是指在同一个类中可以定义多个方法......
  • Java换行输出
    Java换行输出的五种方法第一种:(println)System.out.print("#123");System.out.pritn("$123");//print--不会换行输出输出#123$123System.out.print("#123");System.out.println("$123");//println--输出时直接换行或者System.out.println("$123&......
  • ASP.NET Core Web API设置响应输出的Json数据格式的两种方式
    前言在ASP.NETCoreWebAPI中设置响应输出Json数据格式有两种方式,可以通过添加System.Text.Json或Newtonsoft.JsonJSON序列化和反序列化库在应用程序中全局设置接口响应的Json数据格式,本文示例使用的是新的MinimalAPI模式。JSON序列化和反序列化库System.Text.JsonSystem.Te......
  • JavaSE练习,JDBC驱动,基于swing库的带登录功能计算器
    一、前言本次作业是基于上次的计算器功能所做的改进,通过JDBC连接MySQL增加了登录与注册功能,并对计算器所作的运算进行了记录。虽然基于上次的作业所作,但是设计编写的模块大部分与之无关(登录注册自然与计算器无关)。所以本次作业属于再开发而不是运营维护。二、概要设计......
  • LeetCode-Java:27.移除元素
    题目给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用O(1)额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数......