• 将JSON数据转换成JAVA的实体类


    将JSON数据转换成JAVA的实体类

    看了好多博客不如这个up讲的好
    完全搞懂

    整理的代码下载即可

    Json使用场景

    在这里插入图片描述

    首先说一下,有许多jar包都可以

    1.Jackson

        <properties>
          <!--json 版本号-->
        <jackson.version>2.8.7</jackson.version>
        </properties>
    
    
    <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-core</artifactId>
          <version>${jackson.version}</version>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>${jackson.version}</version>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    泛型的处理

    通用配置
    在静态配置代码块中
    在这里插入图片描述

    2.阿里巴巴的FastJson的具体使用

    Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。
    无依赖,不需要例外额外的jar,能够直接跑在JDK上。
    FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定引用。
    FastJson采用独创的算法,将parse的速度提升到极致,超过所有json库。

    <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.2.21</version>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1、序列化

    在这里插入图片描述

    1,问题1:不传参数时会把哪个字段消除,不会设置为null

    在这里插入图片描述

    如何解决

    /**
             * WriteMapNullValue指定序列化时包含null
             */
            String personStr = JSON.toJSONString(person, SerializerFeature.WriteMapNullValue);
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    2、问题2 : 日期时间格式

    时间格式不是我们想要的

    {"addr":"河南",
    "birthday":"2022-07-31T11:04:22.283",
    "id":1,
    "name":null,
    "pwd":"123",
    "registerDate":1659236662194,
    "websiteUrl":"com.edu.shengda"}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    解决办法
    在类的属性上添加注解

       @JSONField(format = "yyyy-MM-dd HH:mm:ss")
        private Date registerDate;
        @JSONField(format = "yyyy-MM-dd HH:mm:ss")
        private LocalDateTime birthday;
    
    • 1
    • 2
    • 3
    • 4

    打印结果

    {"addr":"河南","birthday":"2022-07-31 11:07:27","id":1,"name":null,"pwd":"123","registerDate":"2022-07-31 11:07:27","websiteUrl":"com.edu.shengda"}
    
    
    • 1
    • 2

    3、问题3 : 奇怪的$ref

    [{"id":3,"name":"L4"},{"$ref":"$[0]"},{"$ref":"$[0]"}]
    
    • 1

    如何解决

     /**
             * DisableCircularReferenceDetect 开启禁用引用探测
             */
            String string = JSON.toJSONString(List,SerializerFeature.DisableCircularReferenceDetect);
           
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3、问题3 : SerializeFilter定制处理

    对属性和属性值在序列化前做定制处理

    2、反序列化

    1、问题1 当有泛型时

    3、通用设置

    测试的时候可以看一下
    在这里插入图片描述

    指定属性名
    在这里插入图片描述

    指定不参与序列化和反序列化的字段
    在这里插入图片描述

    3.Google的Gjson

    <dependency>
          <groupId>com.google.code.gson</groupId>
          <artifactId>gson</artifactId>
          <version>2.8.2</version>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    Linux网络编程——tcp套接字
    使用 flex 弹性盒保持容器均分布局
    力扣爆刷第97天之hot100五连刷71-75
    CentOS 7 安装 Nginx
    外卖项目(项目优化2)11---读写分离
    编译原理:语法分析(自下向上)
    Java中的SQL注入简易分析
    sql-lab 通关笔记
    python + urllib + BeautifulSoup 获取百度首页logo
    【错误解决方案】ModuleNotFoundError: No module named ‘cPickle‘
  • 原文地址:https://blog.csdn.net/weixin_45905210/article/details/126081415