Java의 Jackson JSON 직렬화-속성 이름에 중첩되는 대신 루트에 k / v 쌍 쓰기

패트릭

이 기본 형식을 따르는 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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

목적 c에서 json 직렬화에 대한 속성 이름 바꾸기

분류에서Dev

Jackson : 속기 속성 값으로 json을 역 직렬화하는 방법

분류에서Dev

속성 이름 대신 속성 값을 표시하기 위해 json을 직렬화하는 방법은 무엇입니까?

분류에서Dev

Jackson JSON : 다른보기에서 특정 속성을 직렬화 하시겠습니까?

분류에서Dev

json 배열과 일반 속성을 jackson의 pojo로 역 직렬화하는 방법. 어레이 만 작동

분류에서Dev

Jackson은 json 문자열을 역 직렬화하지만 bean에는 json 문자열의 속성 / 키가 없습니다.

분류에서Dev

List <Bar>에 대한 Json 역 직렬화 내의 속성 설정자

분류에서Dev

XML의 특정 속성에 대한 직렬화 비활성화

분류에서Dev

Java에서 Jackson을 사용하여 setter less 속성을 직렬화하는 방법

분류에서Dev

장고 모델 객체의 중첩 된 직렬화 된 목록을 대신 키 / 값 쌍이되도록 사용자 정의 할 수 있습니까?

분류에서Dev

속성 이름에 $를 사용하여 JSON 역 직렬화

분류에서Dev

JSON 일반 속성 직렬화에 클래스 이름 포함

분류에서Dev

C # Newtonsoft.json을 사용하여 단 하나의 속성 (루트를 찾을 수 없음)에 대한 Json 응답을 역 직렬화합니다.

분류에서Dev

Java 직렬화 / 역 직렬화에 대한 안전한 json

분류에서Dev

유형에 따라 컬렉션 속성 이름이 변경되는 일반으로 JSON 역 직렬화

분류에서Dev

ActiveRecord는 현재 속성에 대해 사용자 정의 직렬 변환기에 nil을 전송하는 직렬화

분류에서Dev

Json.NET은 json 문자열을 역 직렬화 또는 직렬화하고 속성을 런타임에 정의 된 다른 속성 이름에 매핑합니다.

분류에서Dev

dotnet 객체를 json에 json으로 직렬화합니다. 여기서 key는 객체의 속성이고 전체 객체의 값입니다.

분류에서Dev

C # 중첩 된 JSON의 일부를 개체 속성에 저장하지만 역 직렬화하지 않는 방법은 무엇입니까?

분류에서Dev

자체적으로 null 값의 직렬화 된 JSON 객체 인 값으로 JSON 속성에 대한 읽기를 정의합니다.

분류에서Dev

Jackson을 사용하여 JAVA 클래스를 대상으로하는 JSON 직렬화 및 역 직렬화

분류에서Dev

(de) jackson으로 kotlin 델리게이트 속성 직렬화

분류에서Dev

C # 직렬화의 클래스 속성에 대한 별칭

분류에서Dev

TSV에 대한 클래스의 특정 속성 직렬화

분류에서Dev

C #에서 역 직렬화하는 동안 JSON 문자열에없는 속성의 초기화를 방지하는 방법은 무엇입니까?

분류에서Dev

여러 속성에 대해 직렬화되지 않음

분류에서Dev

직렬화 중에 Jackson JsonIdentityInfo 무시

분류에서Dev

면도기 페이지, json 직렬화 된 문자열을 모델 속성에 전달하는 방법

분류에서Dev

중첩 클래스에 대한 JSON (역) 직렬화

Related 관련 기사

  1. 1

    목적 c에서 json 직렬화에 대한 속성 이름 바꾸기

  2. 2

    Jackson : 속기 속성 값으로 json을 역 직렬화하는 방법

  3. 3

    속성 이름 대신 속성 값을 표시하기 위해 json을 직렬화하는 방법은 무엇입니까?

  4. 4

    Jackson JSON : 다른보기에서 특정 속성을 직렬화 하시겠습니까?

  5. 5

    json 배열과 일반 속성을 jackson의 pojo로 역 직렬화하는 방법. 어레이 만 작동

  6. 6

    Jackson은 json 문자열을 역 직렬화하지만 bean에는 json 문자열의 속성 / 키가 없습니다.

  7. 7

    List <Bar>에 대한 Json 역 직렬화 내의 속성 설정자

  8. 8

    XML의 특정 속성에 대한 직렬화 비활성화

  9. 9

    Java에서 Jackson을 사용하여 setter less 속성을 직렬화하는 방법

  10. 10

    장고 모델 객체의 중첩 된 직렬화 된 목록을 대신 키 / 값 쌍이되도록 사용자 정의 할 수 있습니까?

  11. 11

    속성 이름에 $를 사용하여 JSON 역 직렬화

  12. 12

    JSON 일반 속성 직렬화에 클래스 이름 포함

  13. 13

    C # Newtonsoft.json을 사용하여 단 하나의 속성 (루트를 찾을 수 없음)에 대한 Json 응답을 역 직렬화합니다.

  14. 14

    Java 직렬화 / 역 직렬화에 대한 안전한 json

  15. 15

    유형에 따라 컬렉션 속성 이름이 변경되는 일반으로 JSON 역 직렬화

  16. 16

    ActiveRecord는 현재 속성에 대해 사용자 정의 직렬 변환기에 nil을 전송하는 직렬화

  17. 17

    Json.NET은 json 문자열을 역 직렬화 또는 직렬화하고 속성을 런타임에 정의 된 다른 속성 이름에 매핑합니다.

  18. 18

    dotnet 객체를 json에 json으로 직렬화합니다. 여기서 key는 객체의 속성이고 전체 객체의 값입니다.

  19. 19

    C # 중첩 된 JSON의 일부를 개체 속성에 저장하지만 역 직렬화하지 않는 방법은 무엇입니까?

  20. 20

    자체적으로 null 값의 직렬화 된 JSON 객체 인 값으로 JSON 속성에 대한 읽기를 정의합니다.

  21. 21

    Jackson을 사용하여 JAVA 클래스를 대상으로하는 JSON 직렬화 및 역 직렬화

  22. 22

    (de) jackson으로 kotlin 델리게이트 속성 직렬화

  23. 23

    C # 직렬화의 클래스 속성에 대한 별칭

  24. 24

    TSV에 대한 클래스의 특정 속성 직렬화

  25. 25

    C #에서 역 직렬화하는 동안 JSON 문자열에없는 속성의 초기화를 방지하는 방법은 무엇입니까?

  26. 26

    여러 속성에 대해 직렬화되지 않음

  27. 27

    직렬화 중에 Jackson JsonIdentityInfo 무시

  28. 28

    면도기 페이지, json 직렬화 된 문자열을 모델 속성에 전달하는 방법

  29. 29

    중첩 클래스에 대한 JSON (역) 직렬화

뜨겁다태그

보관