code

JSON 필드 이름을 다른 개체 필드 이름에 매핑하려면 어떻게 해야 합니까?

starcafe 2023. 2. 12. 18:05
반응형

JSON 필드 이름을 다른 개체 필드 이름에 매핑하려면 어떻게 해야 합니까?

다음 jax-b 주석의 잭슨 json 주석에서 애매한 방법은 무엇입니까?

xml이 아닌 json을 생성해야 하며 jax-b로 표시되는 기존 잭슨 주석을 알아야 합니다.

  1. 필드 이름을 변경합니다.
  2. 필드 대신 getter를 사용합니다.

이러한 기능은 json/xml 요소 이름이 "와 같은 Java 예약 단어인 경우 특히 중요합니다.new", "public", "static" 등

그래서 POJO 필드에 각각 '_new_', '_public_', '_static_' 등의 이름을 붙여야 합니다.

그러나 jax-b 주석을 사용하여 생성된 XML(및 json) 요소의 이름을 "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_ ;
}

property 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")

디폴트로는 잭슨은 getter와 setter를 사용하여 serialize 및 deserialize를 수행합니다.

상세한 것에 대하여는, 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주석입니다.물론 잭슨 등은 JSON Binding API의 일부 구현일 뿐이므로 이를 준수할 가능성이 높습니다.

Jackson을 사용하지 않는 경우 속성의 이름을 변경하려면 @SerializedName("your_original_key_name")을 사용할 수 있습니다.

My 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 Keywords as Json Key Name), 또는 원래 키 이름에서 데이터를 가져오기 위해 변수 이름을 변경하는 경우 이것이 가장 쉬운 방법입니다.

@Himanshu's Answer를 반복하고 있을 뿐입니다.

Java Bean 속성 필드

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

여기 이 Import가 필요합니다.

import com.google.gson.annotations.SerializedName;

메이븐 의존 관계

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

언급URL : https://stackoverflow.com/questions/9741134/how-to-map-json-field-names-to-different-object-field-names

반응형