이 기본 형식을 따르는 JSON 문자열을 작성해야합니다.
{
"xmlns": {
"nskey1" : "nsurl1",
"nskey2" : "nsurl2"
},
"datakey1": "datavalue1",
"datakey2": "datavalue2"
}
다음 클래스를 사용하여 데이터를 표시하고 있으며이 클래스의 인스턴스는 Jackson ObjectMapper로 직렬화됩니다.
public class PayloadData {
public Map<String, String> payloadData = new TreeMap<String, String>();
@JsonProperty("xmlns")
public Map<NamespaceEnum, String> namespaces = new TreeMap<NamespaceEnum, String>();
@JsonAnyGetter
public Map<String, String> getPayloadData() {
return payloadData;
}
}
이 클래스의 인스턴스를있는 그대로 직렬화하면 결과 JSON은 다음과 같습니다.
{
"xmlns": {
"nskey1" : "nsurl1",
"nskey2" : "nsurl2"
},
"payloadData": {
"datakey1": "datavalue1",
"datakey2": "datavalue2"
},
"datakey1": "datavalue1",
"datakey2": "datavalue2"
}
명명 규칙에 따라 의미가 있지만 속성 식별자 및 중첩을 포함하는 중복없이 JSON의 루트 컨텍스트에 payloadData 맵을 배치하는 방법을 찾고 있습니다. 저는 다양한 형태 로 많은 주석을 시도 했습니다 . ObjectMapper wrap_root_value SerializationFeature를 비활성화하려고 시도했습니다. 솔직히 모든 것을 시도한 것 같습니다. 그래서 내가 창문 밖으로 컴퓨터를 던지기 전에 고통스럽게 분명해야 할 것을 지적하는 데 도움이되는 두 번째 (그리고 그 이상) 눈을 요청합니다.
귀하의 관심과 조언에 미리 감사드립니다.
편집 : 내가 지금 보는 실제 출력 JSON을 업데이트했습니다. 데이터가 복제되고 있으며 중첩 속성이있는 중복을 제거하고 싶습니다.
문제는 PayloadData
공개 속성과 getter에 대해 2 개의 접근자가 노출 되어 있으므로 두 번 직렬화된다는 것입니다. 가능하다면 데이터 클래스를 변경 불가능하도록 재구성하는 것이 좋습니다. 예를 들면 :
public class PayloadData {
private final Map<String, String> payloadData;
private final Map<NamespaceEnum, String> namespaces;
@JsonCreator
public PayloadData(@JsonProperty("xmlns") Map<NamespaceEnum, String> namespaces,
@JsonProperty("payloadData") Map<String, String> payloadData) {
this.namespaces = namespaces;
this.payloadData = payloadData;
}
@JsonAnyGetter
public Map<String, String> getPayloadData() {
return payloadData;
}
@JsonProperty("xmlns")
public Map<NamespaceEnum, String> getNamespaces() {
return namespaces;
}
}
이것은 ObjectMapper의 구성없이 원하는 출력을 제공합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다