fastjson2使用

说明:fastjson2是一个性能极致并且简单易用的Java JSON库(官方语),本文介绍在Spring Boot项目中如何使用fastjson2。

创建项目

首先,创建一个Maven项目,引入fastjson2依赖,如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.12</version><relativePath/></parent><groupId>com.hezy</groupId><artifactId>fastjson2_demo</artifactId><version>1.0-SNAPSHOT</version><name>Archetype - fastjson2_demo</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--fastjson2依赖--><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.50</version></dependency></dependencies>
</project>

创建一个实体类对象,User

import lombok.*;
import java.io.Serializable;@Data
public class User implements Serializable {/*** id*/private String id;/*** 证件号*/private String cardNo;/*** 手机号*/private String phone;/*** 姓名*/private String name;/*** 用户名*/private String username;/*** 密码*/private String password;
}

这里需要注意对象需要实现Serializable 接口,表示该对象实例能被序列化,另外对象需要有全参构造、无参构造(@Data注解自动生成),在分布式项目中,服务之间传输对象(如Dubbo、MQ)底层实现依赖于对象的全参构造,如果对象没有全参构造方法会报错的。

还有,严格来说,对象需要设置一个序列化版本ID,不设置Java虚拟机会自动为其设置。但如果在序列化之后,改动过对象的属性,那么自动设置的序列化版本ID会发生改变,这时候再去反序列化原来生成过的JavaBean数据(如文本、xml文件、缓存中的)就会报错。

private static final long serialVersionUID = 1L

这里只是一个Demo,就不讲究了。

使用

先创建一些变量,如下:

    static User user;static String userJson = "{\"id\":\"10001\",\"cardNo\":\"123456194910014896\",\"phone\":\"12345678901\",\"name\":\"hezy\",\"username\":\"hezy\",\"password\":\"123456\"}";static byte[] userJsonBytes = userJson.getBytes();static String userJsonArray = "[{\"id\":\"10001\",\"cardNo\":\"123456194910014896\",\"phone\":\"12345678901\",\"name\":\"hezy\",\"username\":\"hezy\",\"password\":\"123456\"}]";static {user = new User();user.setId("10001");user.setCardNo("123456194910014896");user.setPhone("12345678901");user.setName("hezy");user.setUsername("hezy");user.setPassword("123456");}

2.1将JSON解析为JSONObject

    /*** 2.1将JSON解析为JSONObject*/@Testpublic void jsonToJSONObject() {JSONObject jsonObject1 = JSON.parseObject(userJson);System.out.println(jsonObject1);JSONObject jsonObject2 = JSON.parseObject(userJsonBytes);System.out.println(jsonObject2);}

在这里插入图片描述

2.2 将JSON解析为JSONArray

    /*** 2.2将JSON解析为JSONArray*/@Testpublic void jsonToJSONArray() {JSONArray jsonArray = JSON.parseArray(userJsonArray);System.out.println(jsonArray.get(0));}

在这里插入图片描述

2.3 将JSON解析为Java对象

    /*** 2.3 将JSON解析为Java对象*/@Testpublic void jsonToJavaBean() {User userBean = JSON.parseObject(userJson, User.class);System.out.println(userBean);}

在这里插入图片描述

2.4 将Java对象序列化为JSON

    /*** 2.4 将Java对象序列化为JSON*/@Testpublic void javaBeanToJson() {String jsonString = JSON.toJSONString(user);System.out.println(jsonString);byte[] jsonBytes = JSON.toJSONBytes(userJsonBytes);System.out.println(jsonBytes);}

在这里插入图片描述

2.5 使用JSONObject、JSONArray

2.5.1 获取简单属性
    /*** 2.5.1 使用JSONObject、JSONArray* 获取简单属性*/@Testpublic void getValue() {JSONObject jsonObject = JSON.parseObject(userJson);String username = jsonObject.getString("username");System.out.println(username);}

在这里插入图片描述

2.5.2 读取JavaBean
    /*** 2.5.2 使用JSONObject、JSONArray* 读取JavaBean*/@Testpublic void getJavaBean() {JSONArray jsonArray = JSON.parseArray(userJsonArray);JSONObject jsonObject = JSON.parseObject(userJson);User userBean = jsonArray.getObject(0, User.class);System.out.println(userBean);// 这里也可以换成自定义对象,就是说支持读取对象中的对象String username = jsonObject.getObject("username", String.class);System.out.println(username);}

在这里插入图片描述

2.5.3 转为JavaBean
    /*** 2.5.3 使用JSONObject、JSONArray* 转为JavaBean*/@Testpublic void toJavaBean() {JSONArray jsonArray = JSON.parseArray(userJsonArray);JSONObject jsonObject = JSON.parseObject(userJson);User user = jsonObject.toJavaObject(User.class);System.out.println(user);List<User> users = jsonArray.toJavaList(User.class);System.out.println(users);}

在这里插入图片描述

2.6 将JavaBean对象序列化为JSON

    /*** 2.6 将JavaBean对象序列化为JSON*/@Testpublic void javaBeanObjectToJson() {String jsonString = JSON.toJSONString(user);System.out.println(jsonString);byte[] jsonBytes = JSON.toJSONBytes(user);System.out.println(jsonBytes);}

在这里插入图片描述

相关注解

  • @JsonIgnore:序列化时排除该属性,详情参考:排除对象属性序列化的三种方式

  • @JSONType(orders = {}):定义序列化时的属性顺序;

@Data
@JSONType(orders = {"id", "cardNo", "phone", "name", "username", "password"})
public class User implements Serializable {……
}

如上面2.6方法,加上上面的注解后重新启动,结果如下,序列化后属性顺序改变了:

在这里插入图片描述

  • @JSONField(name = “”):指定该属性序列化时的名称;
    /*** 姓名*/@JSONField(name = "realName")private String name;

如上面2.6方法,加上注解后重新启动,结果如下,序列化后的name变为realName

在这里插入图片描述

  • @JsonFormat(pattern = “yyyy-MM-dd”, timezone = “GMT+8”):日期格式化成yyyy-MM-dd,时区为东八区;

创建一个日期属性,如下:

    /*** 生日*/@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")private Date birthday;

赋值,当前日期

user.setBirthday(new Date());

打印序列化前后的内容

    /*** 2.6 将JavaBean对象序列化为JSON*/@Testpublic void javaBeanObjectToJson() {System.out.println(user);String jsonString = JSON.toJSONString(user);System.out.println(jsonString);}

可以看到日期格式发生了改变

在这里插入图片描述

总结

集中去看API毫无意义,因为看了、敲了,用的时候也会忘,而且这些API名称看起来都差不多,不好区分。用的时候再去查(源码、百度、GPT)也都来得及,后面的注解值得一看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/13109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

战网国际服注册教程 暴雪战网国际服账号注册一站式教程分享

战网国际版&#xff0c;也即Battle.net环球版&#xff0c;是由暴雪娱乐操刀的全球化游戏交流枢纽&#xff0c;它突破地理限制&#xff0c;拥抱全世界的游戏玩家。与仅限特定地区的版本不同&#xff0c;国际版为玩家开辟了无障碍通道&#xff0c;让他们得以自由探索暴雪庞大游戏…

如何使用JMeter测试导入接口/导出接口?

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号&#xff1a;互联网杂货铺&#xff0c;回复1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 今天上班&#xff0c;被开发问了一个问题&#xff1a;JM…

最小质数对-第12届蓝桥杯国赛Python真题解析

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第63讲。 最小质数对&#…

基于SSM的“羽毛球馆管理系统”的设计与实现(源码+数据库+文档)

基于SSM的“羽毛球馆管理系统”的设计与实现&#xff08;源码数据库文档) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统结构图 登录界面 后台用户添加 后台用户管理 球场添加 球场…

Linux 第三十三章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

大模型学习笔记九:模型微调

文章目录 一、什么时候需要Fine-Tuning二、用Hugging Face根据电影评论输出来对电影进行情感分类1)安装依赖2)操作流程3)名字解释4)代码导入库和加载模型、加载数据库、加载tokenlizer5)其他相关公共变量赋值(随机种子、标签集评价、标签转token_Id)6)处理数据集:转成…

Altium Designer封装库和元器件符号库下载与导入教程(SnapEDA 、Ultra Librarian、Alldatasheetcn)

1.AD封装库和元器件符号库下载网址 以下是一些全球热门的Altium Designer封装库和元器件符号库下载网址推荐&#xff1a; Altium Content Vault (现称为Altium Manufacturer Part Search)&#xff1a;这是Altium官方提供的元器件库&#xff0c;可以直接在Altium Designer中使用…

免费体验GPT-4o这5大功能,非常好用!

这几天&#xff0c;OpenAI发布了新的GPT版本&#xff0c;GPT-4o&#xff0c;比GPT4更加智能也更快。 据说&#xff0c;GPT-4o在文本、推理和编码智能方面实现了GPT-4 Turbo级别的性能&#xff0c;在多语言、文本、音频和视觉功能方面甚至超过了市面上所有同类产品。 有几个亮点…

数据结构复习指导之图的存储及基本操作

文章目录 图的存储及基本操作 考纲内容 复习提示 1.邻接矩阵法 2.邻接表法 3.十字链表 4.邻接多重表 5.图的基本操作 图的存储及基本操作 图的存储必须要完整、准确地反映顶点集和边集的信息。根据不同图的结构和算法&#xff0c;采用不同的存储方式将对程序的效率产生…

Python进度条工具——tqdm

原文链接&#xff1a;http://www.juzicode.com/python-note-tqdm 在安装Python库文件的时候我们经常可以看到这种进度条&#xff1a; 其实Python库中就自带了现成的工具库——tqdm。 tqdm读起来比较拗口&#xff0c;它是从“进程”的阿拉伯语taqaddum简化而来。 安装tqdm 使用…

C++二叉搜索树搜索二叉树二叉排序树

C二叉搜索树 1. 二叉搜索树的概念 二叉搜索树&#xff08;BST,Binary Search Tree)&#xff0c;也称为二叉排序树或二叉查找树。它与一般二叉树的区别在于&#xff1a;每个结点必须满足“左孩子大于自己&#xff0c;右孩子小于自己”的规则。在这种规则的约束下&#xff0c;二…

ADS Momentum 仿真设置

1、选择Momenttum Microwave。 2、Layout不需要操作。 3、Partitioning 不需要操作。 4、没有叠层的话需要新建叠层&#xff0c;过孔可以在叠层中右键添加。 5、注意确认端口的Gnd Layer。 6、设置仿真频率。 7、Output Plan。 8、Option。 最后运行仿真&#xff0c;等待结果即…

算法学习(7)-树

目录 开启“树”之旅 二叉树 堆--优先队列 并查集 开启“树”之旅 是不是很像一棵倒挂的树&#xff1f;也就是说它是根朝上&#xff0c; 而叶子朝下的。不像&#xff1f;哈哈&#xff0c;来看看下面的图你就会觉得像啦。 你可能会间&#xff1a; 树和图有什么区别&#xff…

代码生成工具1 ——项目简介和基础开发

1 项目简介 需要提前在数据库建好表&#xff0c;然后执行代码生成工具&#xff0c;会生成简单的Java文件&#xff0c;避免重复编写增删改查代码。类似的工具网上有很多&#xff0c;本人开发这个工具属于自娱自乐。这个专栏会记录开发的过程。 2 项目搭建 数据库使用MySQL &…

APP没有上架就开通了APP支付,微信商户的这个操作绝了

在当今的移动支付时代&#xff0c;APP支付已成为商家与消费者之间的重要桥梁。然而&#xff0c;对于一些尚未上架的应用来说&#xff0c;如何快速开通APP支付功能一直是个难题。最近&#xff0c;微信商户平台的一项新操作&#xff0c;为这类商家带来了福音---APP没有上架&#…

财富增长新途径:副业赚钱方法全攻略

探寻财富之路&#xff1a;多元化赚钱途径解析 在追求财富的道路上&#xff0c;每个人都在以自己的方式前行。然而&#xff0c;正如古人所云&#xff1a;“君子爱财&#xff0c;取之有道。”今天&#xff0c;我将为您揭示一些新颖且实用的赚钱途径&#xff0c;希望能为您的财富…

Blender雕刻建模_衰减

衰减 从中心点向外的强度衰减。 其中 中心点&#xff1a;即笔刷选中的顶点 半径&#xff1a;即笔刷的半径 衰减范围 从中心点向外的一个球形空间&#xff08;不仅是看见的2D球&#xff0c;而是一个3D球形的空间&#xff09; 为了避免误操作有如下几种方法&#xff1a; -Al…

Unity射击游戏开发教程:(13)如何在Unity中播放音效

在本文中,我将向大家展示一些为游戏添加声音的不同方法。 我们为游戏添加声音的第一种方法是播放背景音乐。在此,我们将创建游戏对象(“音频管理器”)并创建一个子游戏对象(“背景音乐”)。该子游戏对象将是播放音乐的对象,因此需要向其添加音频源组件。如果没有音频源组…

【LInux】<基础IO> 文件操作 | 文件描述符 | 重定向

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

springboot004网页时装购物系统

springboot004网页时装购物系统 亲测完美运行带论文&#xff1a;获取源码&#xff0c;私信评论或者v:niliuapp 运行视频 包含的文件列表&#xff08;含论文&#xff09; 数据库脚本&#xff1a;db.sql其他文件&#xff1a;ppt.pptx论文/文档&#xff1a;开题报告.docx论文&…