栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java > SpringBoot

属性序列化自定义与字母表排序-JSON框架Jackson精解第3篇

SpringBoot 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

属性序列化自定义与字母表排序-JSON框架Jackson精解第3篇

Jackson是Spring Boot默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库。有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的,没有这种限制。它提供了很多的JSON数据处理方法、注解,也包括流式API、树模型、数据绑定,以及复杂数据类型转换等功能。它虽然简单易用,但绝对不是小玩具,更多的内容我会写成一个系列,5-10篇文章,请您继续关注我。

  • 《序列化与反序列化核心用法-JSON框架Jackson精解第一篇》

    • 一、基础数据准备
    • 二、序列化方法
    • 三、反序列化方法
    • 四、字段重命名@JsonProperty
    • 五、忽略null字段的序列化@JsonInclude
    • 六、忽略指定的字段
  • 《特殊数据格式处理-JSON框架Jackson精解第2篇》

    • 一、从URL读取JSON数据
    • 二、Unknow Properties 赋值失败处理
    • 三、未赋值Java Bean序列化
    • 四、日期格式化

大家在平时进行JSON数据序列化过程中,经常会有按照一定顺序序列化属性这样的需求。本文为大家介绍如何对JSON序列化的属性进行排序,可以自定义顺序,也可以按照字母表顺序排序。

一、@JsonPropertyOrder属性排序

通过JsonPropertyOrder注解指定java POJO中各个成员变量的属性序列化顺序。

@Data
@JsonPropertyOrder({"salary","name","age","hobbies","friends"})
public class PlayerStar {

  private String name;
  private Integer age;
  private String[] hobbies;    //业余爱好,数组
  private List friends;   //  朋友
  private Map salary; //年收入 Map
}

最终Java POJO对象序列化为如下的字符串,属性是按照JsonPropertyOrder注解定义的顺序序列化的(“salary”,“name”,“age”,“hobbies”,“friends”)。如果不使用JsonPropertyOrder指定顺序,默认是按照Java类成员变量的声明顺序进行序列化。

{
  "salary" : {
    "2000" : 10000000,
    "2010" : 62000000,
    "2020" : 112400000
  },
  "name" : "乔丹",
  "age" : 45,
  "hobbies" : [ "高尔夫球", "棒球" ],
  "friends" : [ "kobe", "curry", "james" ]
}

可以使用下面的代码将PlayerStar对象序列化为字符串

  //getInstance是一个为PlayerStar各属性赋值的初始化方法,可以参考本系列文章第一节:基础数据准备
  PlayerStar jordan = PlayerStar.getInstance();

  //ObjectMapper作为Jackson的API工具类存在
  ObjectMapper mapper = new ObjectMapper();
  String jsonInString2 = mapper.writerWithDefaultPrettyPrinter().writevalueAsString(jordan);
  System.out.println(jsonInString2);
二、字母表顺序排序

使用@JsonPropertyOrder(alphabetic = true)定义Java类成员变量的序列化顺序

@JsonPropertyOrder(alphabetic = true)
public class PlayerStar {
     //成员变量定义和上文一致
}

在英语字母表中,age(a开头) > friends(f开头) ->hobbies(h开头),以此类推,所以最终JSON序列化结果如下:

{
  "age" : 45,
  "friends" : [ "kobe", "curry", "james" ],
  "hobbies" : [ "高尔夫球", "棒球" ],
  "name" : "乔丹",
  "salary" : {
    "2000" : 10000000,
    "2010" : 62000000,
    "2020" : 112400000
  }
}
欢迎关注我的博客,里面有很多精品合集
  • 本文转载注明出处(必须带连接,不能只转文字):字母哥博客。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/234423.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号