首页 > Java > java教程 > 正文

如何在 Jackson 中处理 JSON 序列化和反序列化的不同属性名称?

Susan Sarandon
发布: 2024-10-30 02:19:02
原创
941 人浏览过

How to Handle Different Property Names for JSON Serialization and Deserialization in Jackson?

处理 JSON 序列化和反序列化的属性名称差异

在 Jackson 中,在序列化和反序列化过程中属性可以有不同的名称。让我们考虑以下 Coords 类的示例:

<code class="java">class Coordinates {
  int red;
}</code>
登录后复制

我们需要以下 JSON 格式进行反序列化:

<code class="json">{
  "red": 12
}</code>
登录后复制

但是,对于序列化,我们需要以下格式:

<code class="json">{
  "r": 12
}</code>
登录后复制

解决方案:

解决方案在于在 getter 和 setter 方法上使用 @JsonProperty 注解,确保它们具有不同的名称:

<code class="java">class Coordinates {
    int red;

    @JsonProperty("r")
    public byte getRed() {
      return red;
    }

    @JsonProperty("red")
    public void setRed(byte red) {
      this.red = red;
    }
}</code>
登录后复制

注意方法名称必须不同。 Jackson 将它们解释为对不同属性的引用,而不是具有不同名称的同一属性。

附加说明:

  • 对于类属性,建议使用适当的数据类型(本例中为字节)来匹配 JSON 负载中的潜在值。
  • 如果需要配置其他设置,可以自定义用于序列化和反序列化的 ObjectMapper。

测试代码:

<code class="java">Coordinates c = new Coordinates();
c.setRed((byte) 5);

ObjectMapper mapper = new ObjectMapper();
System.out.println("Serialization: " + mapper.writeValueAsString(c));

Coordinates r = mapper.readValue("{\"red\":25}",Coordinates.class);
System.out.println("Deserialization: " + r.getR());</code>
登录后复制

输出:

Serialization: {"r":5}
Deserialization: 25
登录后复制

以上是如何在 Jackson 中处理 JSON 序列化和反序列化的不同属性名称?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!