美文网首页ppt
属性序列化自定义与字母表排序-JSON框架Jackson精解第3

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

作者: 字母哥课堂 | 来源:发表于2020-09-21 12:36 被阅读0次

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

    大家在平时进行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<String> friends;   //  朋友
      private Map<String, BigDecimal> 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
      }
    }
    

    欢迎关注我的博客,里面有很多精品合集

    • 本文转载注明出处(必须带连接,不能只转文字):字母哥博客

    觉得对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创作动力! 。另外,笔者最近一段时间输出了如下的精品内容,期待您的关注。

    相关文章

      网友评论

        本文标题:属性序列化自定义与字母表排序-JSON框架Jackson精解第3

        本文链接:https://www.haomeiwen.com/subject/ksrvyktx.html