java小工具util系列3:JSON转实体类对象工具

文章目录
- 准备工作
- 1.JSONObject获取所有的key
- 2.集合中实体对象转换 list中Enrey转Dto
- 3.字符串转List<BusyTimeIndicatorAlarmThreshold>
- 4.json字符串转JSONObject
- 5.list根据ids数组过滤list
- 6.json字符串转JavaBean对象
- 7.json对象转javabean
- 8.jsonObject转map
- 9.List\<User>转jsonArray
- 10.jsonArray转成String[]
- 问题:为啥使用int就判断失效,而使用Integer和String都能准确判断?
- 本人其他文章链接
准备工作
引入pom
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.78</version>
</dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version></dependency>
实体bean
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private Integer id;//姓名private String name;
}
1.JSONObject获取所有的key
技巧:
JSONObject获取key:↓JSONObject obj;for (Map.Entry<String, Object> entry : cutReceiveAlarmMessageObject.entrySet()) {String s = entry.getKey();}
2.集合中实体对象转换 list中Enrey转Dto
list中Enrey转Dto:↓List<WarningNoticeDto> warningNoticeDtoList = warningNoticeList.getInfo().getList().stream().map(this::getEntryToDto).collect(Collectors.toList());/*** entry转DTO* @param warningNotice entry* @return dto*/private WarningNoticeDto getEntryToDto(WarningNotice warningNotice) {WarningNoticeDto warningNoticeDto = new WarningNoticeDto();BeanUtils.copyProperties(warningNotice, warningNoticeDto);return warningNoticeDto;}
3.字符串转List
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.JSONObject;String str = "[{"id": 5,"nodeIdArr": "[\"221\",\"222\"]","nodeNameArr": "[\"enb_221\",\"2222\"]","upperLimitOfTheBusyTimeThreshold": 9,"lowerLimitOfTheBusyTimeThreshold": 2,"dateRangeBeginTime": 1701648000000,"dateRangeEndTime": 1701682200000,"createTime": 1701676594000,"updateTime": 1701737385000,"activeState": "1"},{"id": 6,"nodeIdArr": "[\"2003\",\"501\",\"10010\"]","nodeNameArr": "[\"CityA\",\"501\",\"Vir1\"]","upperLimitOfTheBusyTimeThreshold": 9,"lowerLimitOfTheBusyTimeThreshold": 2,"dateRangeBeginTime": 1701648000000,"dateRangeEndTime": 1701682200000,"createTime": 1701676641000,"updateTime": 1701737382000,"activeState": "1"}]"
List<BusyTimeIndicatorAlarmThreshold> busyTimeIndicatorAlarmThresholdList = new ArrayList<>();
busyTimeIndicatorAlarmThresholdList = JSONObject.parseObject(str, new TypeReference<List<BusyTimeIndicatorAlarmThreshold>>() {});
方式一、List busyTimeIndicatorAlarmThresholdList = new ArrayList<>();
busyTimeIndicatorAlarmThresholdList = JSONObject.parseObject(str, new TypeReference<List>() {});
方式二、List userList = JSONArray.parseArray(str, User.class);
4.json字符串转JSONObject
@Test
public void jsonStrConverJSONObject(){String str = "{\"id\":1,\"name\":\"tom\"}";JSONObject jsonObject = JSONObject.parseObject(str);System.out.println(jsonObject);
}
输出:{“name”:“tom”,“id”:1}
5.list根据ids数组过滤list
@Test
public void listFilter() {List<User> list = new ArrayList<>();list.add(new User(1, "a"));list.add(new User(2, "b"));list.add(new User(3, "c"));list.add(new User(4, "d"));list.add(new User(5, "e"));list.add(new User(6, "f"));list.add(new User(7, "g"));list.add(new User(8, "h"));list.add(new User(9, "i"));list.add(new User(10, "j"));//注意:数组类型必须使用Integer才可以,使用int会判断失败Integer[] arr = new Integer[]{1,2,5,6,9};List<User> filterList = list.stream().filter(item -> Arrays.asList(arr).contains(item.getId())).collect(Collectors.toList());filterList.stream().forEach(System.out::println);
}
6.json字符串转JavaBean对象
@Test
public void jsonStrConverBean(){String str = "{\"id\":1,\"name\":\"tom\"}";User user = JSONObject.parseObject(str, User.class);System.out.println(user);
}
输出:User(id=1, name=tom)
7.json对象转javabean
@Test
public void JSONObjectConverBean(){JSONObject jsonObject = new JSONObject();jsonObject.put("id", 1);jsonObject.put("name", "tom");User user = JSONObject.toJavaObject(jsonObject, User.class);System.out.println(user);
}
输出:User(id=1, name=tom)
8.jsonObject转map
@Test
public void JSONObjectConverMap(){JSONObject jsonObject = new JSONObject();jsonObject.put("id", 1);jsonObject.put("name", "tom");Map<String,String> map = JSONObject.parseObject(jsonObject.toJSONString(), Map.class);System.out.println(map);
}
输出:{name=tom, id=1}
9.List<User>转jsonArray
@Test
public void listConverjJsonArray(){List<User> list = new ArrayList<>();list.add(new User(1, "a"));list.add(new User(2, "b"));//错误写法,因为list.toString()输出[User(id=1, name=a), User(id=2, name=b)]。这东西无法json解析,会报错:com.alibaba.fastjson.JSONException: syntax error, pos 2, line 1, column 3[User(id=1, name=a), User(id=2, name=b)]// JSONArray jsonArray =JSONArray.parseArray(list.toString());//正确写法,简写方式JSONArray jsonArray =JSONArray.parseArray(JSONObject.toJSONString(list));//正确写法,复杂方式// JSONArray jsonArray = new JSONArray();// JSONObject jsonObject = null;// for (User user: list) {// jsonObject = new JSONObject();// jsonObject.put("id", user.getId());// jsonObject.put("name", user.getName());// jsonArray.add(jsonObject);// }System.out.println(jsonArray);
}
10.jsonArray转成String[]
@Test
public void jsonArrayConverStringArray(){JSONArray jsonArray = new JSONArray();jsonArray.add(0, "100");jsonArray.add(1, "101");jsonArray.add(2, "102");System.out.println("jsonArray:" + jsonArray);String[] stringArr = new String[jsonArray.size()];for (int i = 0; i < jsonArray.size(); i++) {stringArr[i] = jsonArray.get(i).toString();}for(String str : stringArr) {System.out.println(str);}
}
问题:为啥使用int就判断失效,而使用Integer和String都能准确判断?
/*** 问题:为啥使用int就判断失效,而使用Integer和String都能准确判断?* 答案:不能将基本数据类型转化为List列表。
*/
@Test
public void test1() {int[] arr = new int[]{1,2,5,6,9};System.out.println(Arrays.asList(arr).contains(1)); //结果为falseInteger[] arr2 = new Integer[]{1,2,5,6,9};System.out.println(Arrays.asList(arr2).contains(1)); //结果为trueString[] arr3 = new String[]{"1","2","5","6","9"};System.out.println(Arrays.asList(arr3).contains("1")); //结果为true//验证答案如下,把arr、arr2、arr3分别返回查看返回泛型,能够看出Arrays.asList(arr)返回的居然是List<int[]>,问题就出在这,说明list里面包含的是一个个的int[],用这个判断ints.contains(1),肯定为falseList<int[]> ints = Arrays.asList(arr);List<Integer> integers = Arrays.asList(arr2);List<String> strings = Arrays.asList(arr3);
}
本人其他文章链接
1.java小工具util系列1:日期毫秒数转日期字符串
https://blog.csdn.net/a924382407/article/details/121955349
2.java小工具util系列2:获取字符modelStr在字符串str中第count次出现时的下标
https://blog.csdn.net/a924382407/article/details/121955455
3.java小工具util系列3:正则表达式匹配:匹配不包含@特殊字符的字符串
https://blog.csdn.net/a924382407/article/details/121955737
4.java小工具util系列4:String[] 转 List< Integer >
https://blog.csdn.net/a924382407/article/details/121956201
5.java小工具util系列5:基础工具代码(Msg、PageResult、Response、常量、枚举)
https://blog.csdn.net/a924382407/article/details/120952865
6.java小工具util系列6:java执行string返回boolean结果
https://blog.csdn.net/a924382407/article/details/117124536
7.java小工具util系列7:集合中实体对象转换 list中Enrey转Dto
https://blog.csdn.net/a924382407/article/details/121957545
8.java小工具util系列8:JSONObject获取key
https://blog.csdn.net/a924382407/article/details/121957607
9.java小工具util系列9:检测一个字符串是否是时间格式
https://blog.csdn.net/a924382407/article/details/123948881
10.java小工具util系列10:时间毫秒数、时间格式字符串、日期之间相互转化
https://blog.csdn.net/a924382407/article/details/124581851
相关文章:
java小工具util系列3:JSON转实体类对象工具
文章目录 准备工作1.JSONObject获取所有的key2.集合中实体对象转换 list中Enrey转Dto3.字符串转List<BusyTimeIndicatorAlarmThreshold>4.json字符串转JSONObject5.list根据ids数组过滤list6.json字符串转JavaBean对象7.json对象转javabean8.jsonObject转map9.List\<U…...
MySQL:找回root密码
一、情景描述 我们在日常学习中,经常会忘记自己的虚拟机中MySQL的root密码。 这个时候,我们要想办法重置root密码,从而,解决root登陆问题。 二、解决办法 1、修改my.cnf配置文件并重启MySQL 通过修改配置文件,来跳…...
计算机网络扫盲(1)——因特网
一、概述 因特网是一个世界范围的计算机网络,即它是一个互联了遍及全世界数十亿计算设备的网络。大家对此应该并不陌生,我们身边有着不计其数的计算机设备被接入了因特网,如今计算机网络这个术语似乎已经有点过时了,用因特网的术语…...
C语言 if语句有无(;)分号问题
在C语言中,if语句后面不带分号(;)的情况有两种主要形式: 1. 带有大括号的代码块:如果if语句后面跟随一个由大括号({})包围的代码块,那么这个代码块中的语句只有在if条件为真时才会执…...
Python-列表详解(列表的创建、用法、遍历、注意事项、特点等)
本文有以下内容: 列表的创建 列表的下标索引注意事项 列表的访问 列表的增加元素 列表的删除元素 列表的任意删除元素 列表的查找元素 列表的查找元素位置 列表的插入任意位置 列表的遍历 列表的拼接方式 列表的切片操作以及注意事项 列表类似于其他语言的数组 列…...
【langchain实战】开源项目-RasaGPT
1、概述 RasaGpt是一个建立在 Rasa 和 Langchain 之上的没有显示界面的LMM聊天机器人平台。它是一个Rasa和Telegram这种利用像Langchain这样的LMM库进行索引、检索和上下文注入的样板及参考实现。 开源地址: GitHub - paulpierre/RasaGPT: 💬 RasaGPT is…...
在线yml和properties相互转换
目前搜索到的大部分代码都存在以下问题: 复杂结构解析丢失解析后顺序错乱 所以自己写了一个,经过不充分测试,基本满足使用。可以直接在线使用 在线地址 除了yml和properties互转之外,还可以生成代码、sql转json等,可…...
数据收集与处理(爬虫技术)
文章目录 1 前言2 网络爬虫2.1 构造自己的Scrapy爬虫2.1.1 items.py2.1.2 spiders子目录2.1.3 pipelines.py 2.2 构造可接受参数的Scrapy爬虫2.3 运行Scrapy爬虫2.3.1 在命令行运行2.3.2 在程序中调用 2.4 运行Scrapy的一些要点 3 大规模非结构化数据的存储与分析4 全部代码 1 …...
C# 雪花算法生成Id工具类
写在前面 传说自然界中并不存在两片完全一样的雪花的,每一片雪花都拥有自己漂亮独特的形状、独一无二;雪花算法也表示生成的ID如雪花般独一无二,该算法源自Twitter。 雪花算法主要用于解决分布式系统的唯一Id生成问题,在生产环境…...
什么是通配符证书?
通配符证书是一种特殊的数字证书,主要用于加密网站与用户之间的通信,以保证数据的私密性和完整性。它的独特之处在于可以使用一个单一的证书来保护无限数量的相关子域名。它使用通配符字符(*)作为占位符,代表任意子域名…...
西南科技大学模拟电子技术实验五(集成运算放大器的应用设计)预习报告
一、计算/设计过程 设计一:用集成运放设计一个输入为0.05v,放大为-100的反相比例运算电路。 对于理想电路,反相比例运算电路的输出电压与输入电压之间的关系如下: =-100,所以 =100 若是假定R1为100k,则R2= =1k 为了减小输入级偏置电流引起的运算误差,在同相输入端…...
LeetCode 每日一题 Day 4
2477. 到达首都的最少油耗 给你一棵 n 个节点的树(一个无向、连通、无环图),每个节点表示一个城市,编号从 0 到 n - 1 ,且恰好有 n - 1 条路。0 是首都。给你一个二维整数数组 roads ,其中 roads[i] [ai,…...
服务器数据恢复—重装系统导致XFS文件系统分区丢失的数据恢复案例
服务器数据恢复环境: 服务器使用磁盘柜RAID卡搭建了一组riad5磁盘阵列。服务器上层分配了一个LUN,划分了两个分区:sdc1分区和sdc2分区。通过LVM扩容的方式,将sdc1分区加入到了root_lv中;sdc2分区格式化为XFS文件系统。…...
Scala 从入门到精通
Scala 从入门到精通 数据类型 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http:…...
华为OD机试 - 九宫格按键输入 - 逻辑分析(Java 2023 B卷 200分)
目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷&#…...
leetcode:225. 用队列实现栈
一、题目 链接:225. 用队列实现栈 - 力扣(LeetCode) 函数原型: typedef struct { } MyStack; MyStack* myStackCreate() void myStackPush(MyStack* obj, int x) int myStackPop(MyStack* obj) int myStackTop(MyStack* obj) …...
Centos7安装GItLab(在线版)
基础环境准备 1.配置清华大学镜像仓库 新建仓库配置文件使用 vim /etc/yum.repos.d/gitlab-ce.repo 命令,输入以下内容,保存 [gitlab-ce] nameGitlab CE Repository baseurlhttps://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/ gpgcheck0 enabl…...
Linux入门笔记
1 Linux概述 Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心…...
nvm for windows使用与node/npm/yarn的配置
1 下载 nvm for windows download – github 下拉到Assets, 下载.exe文件 2 安装 安装到如下文件夹中 目录可以自己选, 可以换别的名字, 自己记住即可 新手建议全部看完再进行个人配置, 或者使用与博主一致的路径 D:\DevelopEnvironment\nvm3 配置nvm使用的镜像 node_mir…...
打工人副业变现秘籍,某多/某手变现底层引擎-StableDiffusionWebUI界面基本布局和操作
一、界面设置 文生图:根据文本提示生成图像 图生图:图像生成图像;功能很强大,自己在后续使用中探索。 后期处理:图片处理;功能很强大,自己在后续使用中探索。 PNG信息:这是一个快速获取图片生成参数的便捷功能。如果图像是在SD里生成的,您可以使用“发送到”按钮将…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
