繁体   English   中英

如何将 map JSON 字段名改为不同的 object 字段名?

[英]How to map JSON field names to different object field names?

以下jax-b注解在Jackson json注解中的equiv方式是什么?

我需要生成 json 而不是 xml,并且需要知道在 jax-b 中等效表示的常规 jackson 注释。

  1. 重命名字段。
  2. 使用 getters 而不是字段。

如果 json/xml 元素名称是 java 保留字,如“ new ”、“ public ”、“ static ”等,这些特性尤其重要。

因此我们必须将 POJO 字段分别命名为“_new_”、“_public_”、“_static_”等,

但在生成的 XML(和 json)元素中使用 jax-b 注释将它们重命名回“new”、“public”、“static”等。

重命名字段

@XmlAccessorType(XmlAccessType.FIELD)
public class Person{
    @XmlElement(required = true)
    protected String name;
    @XmlElement(required = true)
    protected String address;
    @XmlElement(name = "contractor")
    protected boolean _restricted_ ;
    @XmlElement(name = "new")
    protected boolean _new_ ;
}

重定向到使用属性 getter (我认为这是在 jax-b 中完成的)

@XmlAccessorType(XmlAccessType.PROPERTY)
public class Person{
    protected String name;
    protected String address;
    protected boolean _restricted_ ;
    protected boolean _new_ ;

    @XmlElement(required = true)
    protected String getName() {return name;}
    @XmlElement(required = true)
    protected String getAddress() {return address;}
    @XmlElement(name = "contractor")
    protected boolean getRestricted() {return _restricted_;}
    @XmlElement(name = "new")
    protected boolean getNew(){return _new_;}
}

可能有点晚了,但无论如何..

你可以重命名一个属性只是添加

@JsonProperty("contractor")

默认情况下,Jackson 使用 getter 和 setter 来序列化和反序列化。

更多详细信息: http : //wiki.fasterxml.com/JacksonFAQ

举个例子,你也可以在 getter 和 setter 中使用它来将它重命名为不同的字段

public class Sample {

    private String fruit;

    @JsonProperty("get_apple")
    public void setFruit(String fruit) {
        this.fruit = fruit;
    }

    @JsonProperty("send_apple")
    public String getFruit() {
        return fruit;
    }

}

请注意,正确的 JavaEE API 是使用javax.json.bind.annotation.JsonbProperty注释。 当然,Jackson 和其他人只是 JSON Binding API 的一些实现,他们很可能会遵守这一点。

如果您不使用 Jackson 仍想重命名属性,您可以使用 @SerializedName("your_original_key_name")

我的 JSON 数据:

{
  "default": "0"
}

如您所知,我们从不使用预定义的关键字作为变量名,因此解决方案是:

@SerializedName("default")
private String default_value;

public String getDefault_value() {
        return default_value;
    }
public void setDefault_value(String default_value) {
        this.default_value = default_value;
    }

这就是您现在要做的所有事情,值来自键“default”,您可以使用“default_value”将它与 getter 和 setter 一起使用

在这种情况下(Predifind 关键字作为 Json 键名)或在任何其他您想要更改变量名以从原始键名获取数据的情况下,这是最简单的方法。

我只是重申@Himanshu 的回答,

Java Bean属性字段

@SerializedName("TCS Rate")
private String TCSRate;

在这里我们需要这个导入

import com.google.gson.annotations.SerializedName;

Maven 依赖

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.9.0</version>
</dependency>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM