Jackson으로 사용자 지정 맵 직렬화

자라 투 스트라

사용자 지정 맵을 JSON으로 직렬화하고 싶습니다.

지도 인터페이스를 구현하는 클래스는 다음과 같습니다.

public class MapImpl extends ForwardingMap<String, String> {
//ForwardingMap comes from Guava
    private String                  specialInfo;

    private HashMap<String, String> delegate;

    @Override
    protected Map<String, String> delegate() {
        return this.delegate;
    }
// some getters....
 }

지금 전화하면

    ObjectMapper mapper = new ObjectMapper();
    mapper.writeValue(new File("/somePath/myJson.json"), objectOfMapImpl);

Jackson은 맵을 직렬화하고 변수를 무시합니다. specialInfo

의 사용자 정의 구현으로 몇 가지 시도했지만 JsonSerializer이 코드 조각으로 끝났습니다.

    ObjectMapper mapper = new ObjectMapper();

    SimpleModule module = new SimpleModule("someModule");



       module.addSerializer(CheapestResponseDates.class, new JsonSerializer<MapImpl>() {

            @Override
            public void serialize(final MapImpl value, final JsonGenerator jgen, final SerializerProvider provider) throws IOException, JsonProcessingException {
CheapestResponseDurations.class);
// how to serialize the map here? maybe be in a data node...
                jgen.writeStartObject();
                jgen.writeObjectField("info", value.getInfo());
                jgen.writeEndObject();
            }
        });


    mapper.registerModule(module);

JDK 1.7과 Jackson 2.3.1을 사용하고 있습니다.

알렉세이 가브리 로프

이 블로그 게시물에 설명 된대로 @ JsonAnySetter / @JsonAnyGetter 주석을 활용할 수 있습니다 . 앞서 언급했듯이 사용자 지정 맵 클래스는 Map 인터페이스를 구현해야하므로 별도의 "bean"인터페이스를 추출하고 @JsonSerialize (as = ...) 주석을 통해 직렬화 할 때 Jackson에게 대신 사용하도록 지시 할 수 있습니다.

어떻게 작동하는지 설명하기 위해 예제를 약간 수정했습니다. json 문자열을 다시 맵 객체로 역 직렬화하려면 다른 트릭을 수행해야 할 수 있습니다.

public class MapSerialize  {
public static interface MyInterface {
    String getSpecialInfo();

    @JsonAnyGetter
    Map<String, String> delegate();
}

@JsonSerialize(as = MyInterface.class)
public static class MyImpl extends ForwardingMap<String, String> implements MyInterface {

    private String                  specialInfo;
    private HashMap<String, String> delegate = new HashMap<String, String>();

    public Map<String, String> delegate() {
        return this.delegate;
    }

    @Override
    public String getSpecialInfo() {
        return specialInfo;
    }

    public void setSpecialInfo(String specialInfo) {
        this.specialInfo = specialInfo;
    }

    @Override
    public String put(String key, String value) {
        return delegate.put(key, value);
    }
}

public static void main(String[] args) throws IOException {
    ObjectMapper mapper = new ObjectMapper();
    MyImpl objectOfMapImpl = new MyImpl();
    objectOfMapImpl.setSpecialInfo("specialInfo");
    objectOfMapImpl.put("XXX", "YYY");
    String json = mapper.writeValueAsString(objectOfMapImpl);
    System.out.println(json);
}

}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Jackson의 다형성 직렬화 / 역 직렬화 및 사용자 지정 직렬화 / 역 직렬화

분류에서Dev

Jackson을 사용한 사용자 지정 JSON 직렬화 / 역 직렬화

분류에서Dev

사용자 지정 목록을 JSON C #으로 직렬화

분류에서Dev

C # 직렬화를 사용하여 매우 사용자 지정 형식으로 직렬화하는 방법

분류에서Dev

사전으로 사용자 지정 JSON.net 역 직렬화 <string, string>

분류에서Dev

serde_json을 사용하여 문자열이 아닌 키로 맵 직렬화

분류에서Dev

IllegalStateException-Gson을 사용하여 문자열 배열로 맵 직렬화

분류에서Dev

Jackson의 사용자 지정 JSON 역 직렬화, invalide 배열 제외

분류에서Dev

YamlDotNet-사용자 지정 직렬화

분류에서Dev

Django 사용자 지정 역 직렬화

분류에서Dev

누락 된 정보로 사용자 지정 개체 생성 파일 직렬화

분류에서Dev

Highcharter로 버블 맵 사용자 지정

분류에서Dev

비교기를 사용하여 맵 값으로 맵 정렬

분류에서Dev

System.Text.Json 사용자 지정 직렬화 / 역 직렬화

분류에서Dev

정렬되지 않은 맵 키로 사용자 정의 클래스 포인터

분류에서Dev

Jackson JSON이 사용자 지정 루트 이름으로 요소 배열을 역 직렬화 할 수 없습니까?

분류에서Dev

Jackson 2.0을 사용하여 맵 내에서 JSON 객체 직렬화

분류에서Dev

특정 필드가있는 경우에만 사용자 지정 JSON 역 직렬화 (Jackson 사용)

분류에서Dev

rxjs Observable을 사용자 지정 비즈니스 개체로 직렬화

분류에서Dev

JsonSubTypes없이 jackson을 사용하여 인터페이스를 특정 유형으로 역 직렬화

분류에서Dev

객체 맵의 Jackson 직렬화

분류에서Dev

사용자 정의 객체 목록 JSON이 파이썬으로 직렬화

분류에서Dev

Jackson을 사용하여 패턴으로 속성 역 직렬화

분류에서Dev

JPA (EclipseLink) Java 직렬화를 Jackson / json 사용으로 변경

분류에서Dev

Jackson : 역 직렬화 할 때 맵 값의 키에 대한 참조 유지

분류에서Dev

여러 가능한 형식으로 속성을 읽기위한 사용자 지정 JSON 직렬화 / 역 직렬화

분류에서Dev

readObject에 writeObject로부터를 사용하여 사용자 정의 직렬화

분류에서Dev

직렬화 / 마샬링 패키지 수준 사용자 정의 레코드 유형을 JSON으로

분류에서Dev

잭슨 사용자 정의 직렬화 및 역 직렬화

Related 관련 기사

  1. 1

    Jackson의 다형성 직렬화 / 역 직렬화 및 사용자 지정 직렬화 / 역 직렬화

  2. 2

    Jackson을 사용한 사용자 지정 JSON 직렬화 / 역 직렬화

  3. 3

    사용자 지정 목록을 JSON C #으로 직렬화

  4. 4

    C # 직렬화를 사용하여 매우 사용자 지정 형식으로 직렬화하는 방법

  5. 5

    사전으로 사용자 지정 JSON.net 역 직렬화 <string, string>

  6. 6

    serde_json을 사용하여 문자열이 아닌 키로 맵 직렬화

  7. 7

    IllegalStateException-Gson을 사용하여 문자열 배열로 맵 직렬화

  8. 8

    Jackson의 사용자 지정 JSON 역 직렬화, invalide 배열 제외

  9. 9

    YamlDotNet-사용자 지정 직렬화

  10. 10

    Django 사용자 지정 역 직렬화

  11. 11

    누락 된 정보로 사용자 지정 개체 생성 파일 직렬화

  12. 12

    Highcharter로 버블 맵 사용자 지정

  13. 13

    비교기를 사용하여 맵 값으로 맵 정렬

  14. 14

    System.Text.Json 사용자 지정 직렬화 / 역 직렬화

  15. 15

    정렬되지 않은 맵 키로 사용자 정의 클래스 포인터

  16. 16

    Jackson JSON이 사용자 지정 루트 이름으로 요소 배열을 역 직렬화 할 수 없습니까?

  17. 17

    Jackson 2.0을 사용하여 맵 내에서 JSON 객체 직렬화

  18. 18

    특정 필드가있는 경우에만 사용자 지정 JSON 역 직렬화 (Jackson 사용)

  19. 19

    rxjs Observable을 사용자 지정 비즈니스 개체로 직렬화

  20. 20

    JsonSubTypes없이 jackson을 사용하여 인터페이스를 특정 유형으로 역 직렬화

  21. 21

    객체 맵의 Jackson 직렬화

  22. 22

    사용자 정의 객체 목록 JSON이 파이썬으로 직렬화

  23. 23

    Jackson을 사용하여 패턴으로 속성 역 직렬화

  24. 24

    JPA (EclipseLink) Java 직렬화를 Jackson / json 사용으로 변경

  25. 25

    Jackson : 역 직렬화 할 때 맵 값의 키에 대한 참조 유지

  26. 26

    여러 가능한 형식으로 속성을 읽기위한 사용자 지정 JSON 직렬화 / 역 직렬화

  27. 27

    readObject에 writeObject로부터를 사용하여 사용자 정의 직렬화

  28. 28

    직렬화 / 마샬링 패키지 수준 사용자 정의 레코드 유형을 JSON으로

  29. 29

    잭슨 사용자 정의 직렬화 및 역 직렬화

뜨겁다태그

보관