JSON 필드 이름을 다른 개체 필드 이름에 매핑하려면 어떻게 해야 합니까?
다음 jax-b 주석의 잭슨 json 주석에서 애매한 방법은 무엇입니까?
xml이 아닌 json을 생성해야 하며 jax-b로 표시되는 기존 잭슨 주석을 알아야 합니다.
- 필드 이름을 변경합니다.
- 필드 대신 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
'code' 카테고리의 다른 글
카테고리를 포스트 워드프레스에 관련짓는 방법 (0) | 2023.02.16 |
---|---|
jquery Ajax 호출 - 데이터 매개 변수가 MVC 컨트롤러 작업으로 전달되지 않습니다. (0) | 2023.02.16 |
주의: ob_end_flush(): zlib 출력 압축(1)의 버퍼를 전송하지 못했습니다. (0) | 2023.02.12 |
AngularJs에서 ng-repeat으로 필터링(키, 값)하는 방법 (0) | 2023.02.12 |
서비스/팩토리에서 컨트롤러로의 바인딩 변수 (0) | 2023.02.12 |