将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>

泛型的处理

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

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、序列化

在这里插入图片描述

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

在这里插入图片描述

如何解决

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

在这里插入图片描述

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

时间格式不是我们想要的

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

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

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

打印结果

{"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"}

3、问题3 : 奇怪的$ref

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

如何解决

 /**
         * DisableCircularReferenceDetect 开启禁用引用探测
         */
        String string = JSON.toJSONString(List,SerializerFeature.DisableCircularReferenceDetect);
       

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
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以通过以下步骤将JSON数据转换成实体类: 1. 创建一个与JSON数据结构相匹配的Java类,该类应该包含与JSON键相对应的属性。 2. 使用JSON库(例如Jackson、Gson等)将JSON数据换为Java对象。 3. 使用getter和setter方法访问Java对象的属性。 以下是一个示例代码,以说明如何将JSON数据换为Java对象: 假设我们有以下JSON数据: { "name": "John", "age": 30, "address": { "street": "123 Main St", "city": "New York", "state": "NY", "zip": "10001" } } 并且我们已经创建了一个名为Person的Java类,该类包含name、age和address属性。 Address类也已经创建,其中包含street、city、state和zip属性。 我们可以使用Jackson库将JSON数据换为Person对象: ``` ObjectMapper objectMapper = new ObjectMapper(); String json = "{\"name\":\"John\",\"age\":30,\"address\":{\"street\":\"123 Main St\",\"city\":\"New York\",\"state\":\"NY\",\"zip\":\"10001\"}}"; Person person = objectMapper.readValue(json, Person.class); ``` 在此示例中,我们首先创建了一个ObjectMapper对象,该对象用于将JSON数据换为Java对象。然后,我们将JSON数据作为字符串传递给readValue()方法,并指定要将其换为的Java类(Person类)。最后,我们将返回的Person对象存储在person变量中。 现在,我们可以使用getter和setter方法访问person对象的属性: ``` String name = person.getName(); int age = person.getAge(); String street = person.getAddress().getStreet(); String city = person.getAddress().getCity(); String state = person.getAddress().getState(); String zip = person.getAddress().getZip(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明月常新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值