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里生成的,您可以使用“发送到”按钮将…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...
