FastJson使用

[复制链接]
发表于 2026-2-2 02:02:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
FastJson

引入依赖
  1. <dependency>
  2.     <groupId>com.alibaba</groupId>
  3.     <artifactId>fastjson</artifactId>
  4.     <version>1.2.47</version>
  5. </dependency>
复制代码
序列化

使用的实体类和同一结果类在文章末了

  • 将User对象转化为json字符串
  1. @Test
  2.     void contextLoads() {
  3.         User user = new User();
  4.         String[] hobbies = {"sing","dance","rap"};
  5.         user.setId(1L);
  6.         user.setUsername("kunkun");
  7.         user.setAge(22);
  8.         user.setHobbies(hobbies);
  9.         user.setRegisterDate(new Date());
  10.         user.setBirthday(LocalDateTime.now());
  11.         String toJSONString = JSON.toJSONString(user);
  12.         System.out.println(toJSONString);
  13.     }
复制代码
末了输出结果为:
{“age”:22,“birthday”:1723649279811,“hobbies”:[“sing”,“dance”,“rap”],“registerDate”:1723649279811,“username”:“kunkun”}

  • 对null值的处置惩罚
    fastjson默认会将值为null的数据留空,假如想要对没有值的数据赋为null时可以添加一个参数
  1. //对于对象中包含null值时
  2. String toJSONString = JSON.toJSONString(user, SerializerFeature.WriteMapNullValue);
复制代码

  • 对日期的格式化
  1. //对实体类修改
  2. //fastjson序列化日期格式
  3. @JSONField(format = "yyyy-MM-dd HH:mm:ss")
  4. private Date registerDate;
  5. @JSONField(format = "yyyy-MM-dd HH:mm:ss")
  6. private LocalDateTime birthday;
复制代码

  • $Ref引用探测
  1. @Test
  2. void Test$Ref() {
  3.     ArrayList<User> userList = new ArrayList<>();
  4.     User user = new User();
  5.     user.setId(1L);
  6.     user.setUsername("zhangsan");
  7.     user.setAge(22);
  8.     userList.add(user);
  9.     userList.add(user);
  10.     userList.add(user);
  11.     //直接打印输出结果为:[{"age":22,"id":1,"username":"zhangsan"},{"$ref":"$[0]"},{"$ref":"$[0]"}]
  12.     //String json = JSON.toJSONString(userList);
  13.     //禁用引用探测功能
  14.     String json = JSON.toJSONString(userList,SerializerFeature.DisableCircularReferenceDetect);
  15.         //会发现结果变为正常
  16.     System.out.println(json);
  17. }
复制代码
对于SerializerFilter定制处置惩罚,等用到再学
反序列化


  • 寻常反序列化
  1. @Test
  2. void FastJsonSerializerFilter(){
  3.     String json = "{"age":22,"birthday":"2024-08-14 23:36:47","hobbies":["sing","dance","rap"],"id":null,"registerDate":"2024-08-14 23:36:47","username":"kunkun"}";
  4.     //反序列化为user对象
  5.     User user = JSON.parseObject(json, User.class);
  6.     //User(id=null, username=kunkun, age=22, hobbies=[sing, dance, rap], registerDate=Wed Aug 14 23:36:47 CST 2024, birthday=2024-08-14T23:36:47)
  7.     System.out.println(user);
  8. }
复制代码

  • 碰到泛型,的办理方式
    例如同一给调用端返回Result类,而且Result中接纳了泛型data
  1. String resultJson = "{"code":200,"data":{"age":22,"birthday":"2024-08-14 23:56:34","hobbies":["sing","dance","rap"],"id":null,"registerDate":"2024-08-14 23:56:34","username":"kunkun"},"msg":"null"}\n";
  2. Result result = JSON.parseObject(resultJson, Result.class);
  3. //再进行反序列化时,默认只能返回Object类型,需要进行强制类型转换
  4. Object data = result.getData();
  5. //可以使用TypeReference
  6. Result<User> o = JSON.parseObject(resultJson, new TypeReference<Result<User>>() {
  7. });
  8. User data1 = o.getData();
复制代码
通用设置

写上在序列化或反序列化时都访问效
  1. //指定属性名和json字符串key的对应关系
  2. @JSONField( name = "address")
  3. private String addr;
  4. //不参与序列化,与反序列化
  5. @JSONField( serialize = fales , deserialize = false)
  6. private String password;
复制代码
使用到的类
  1. import com.alibaba.fastjson.annotation.JSONField;
  2. import lombok.Data;
  3. import java.time.LocalDateTime;
  4. import java.util.Date;
  5. @Data
  6. public class User {
  7.     private Long id;
  8.     private String username;
  9.     private int age;
  10.     private String[] hobbies;
  11.     //fastjson序列化日期格式
  12.     @JSONField(format = "yyyy-MM-dd HH:mm:ss")
  13.     private Date registerDate;
  14.     @JSONField(format = "yyyy-MM-dd HH:mm:ss")
  15.     private LocalDateTime birthday;
  16. }
复制代码
  1. package com.sst.result;
  2. import lombok.Data;
  3. @Data
  4. public class Result<T> {
  5.     private int code;
  6.     private String msg;
  7.     private T data;
  8.     public Result(int code, String msg, T t) {
  9.         this.code = code;
  10.         this.msg = msg;
  11.         this.data = t;
  12.     }
  13. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表