Jackson으로 Java 배열 역 직렬화

Avner 레비

Java 직렬화 대신 Jackson을 일반 직렬화 엔진으로 사용하려고합니다. 다음과 같은 방법으로 매퍼를 초기화합니다.

objectMapper = new ObjectMapper();
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

모든 유형 정보는 JSON에 저장되므로 다음을 사용하여 모든 객체를 다시 쓰고 읽을 수 있습니다.

objectMapper.readValue(json, Object.class)

Java 배열을 직렬화 한 다음 역 직렬화하려고 할 때 문제가 있습니다. Jackson은 배열 유형을 JSON에 저장하지 않기 때문에 나중에 deserialization 단계에서 실패합니다. 다음 코드에서 :

    String [] strings = {"A", "B", "C"};
    try {
        String json = objectMapper.writeValueAsString(strings);
        String [] stringsBack = (String [])objectMapper.readValue(json, Object.class);
        if (!strings.equals(stringsBack)) {
            System.err.println("ERROR, stringsBack not the same!!!\n\n");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

json은 "["A ","B ","C "]"로 설정되지만 deserialization시 다음 예외가 발생합니다.

Exception in thread "main" java.lang.IllegalArgumentException: Invalid type id 'A' (for id type 'Id.class'): no such class found
at com.fasterxml.jackson.databind.jsontype.impl.ClassNameIdResolver._typeFromId(ClassNameIdResolver.java:66)
at com.fasterxml.jackson.databind.jsontype.impl.ClassNameIdResolver.typeFromId(ClassNameIdResolver.java:48)
at com.fasterxml.jackson.databind.jsontype.impl.TypeDeserializerBase._findDeserializer(TypeDeserializerBase.java:157)
at com.fasterxml.jackson.databind.jsontype.impl.AsArrayTypeDeserializer._deserialize(AsArrayTypeDeserializer.java:94)
at com.fasterxml.jackson.databind.jsontype.impl.AsArrayTypeDeserializer.deserializeTypedFromAny(AsArrayTypeDeserializer.java:68)
at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.deserializeWithType(UntypedObjectDeserializer.java:494)
at com.fasterxml.jackson.databind.deser.impl.TypeWrappedDeserializer.deserialize(TypeWrappedDeserializer.java:42)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3560)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2576)
at Main.run(Main.java:86)

Jackson에게 Java 배열 유형 정보를 JSON에 저장하도록 지시하는 방법이 있습니까? 내 직렬화 엔진은 일반적이며 JSON 문자열에서 읽을 유형을 미리 알지 못합니다.

Avner 레비

지금까지 찾은 최고의 솔루션은 직렬화 전에 객체가 배열 (Class.isArray)인지 확인한 다음 직렬화를 수행하는 것입니다.

TypeReference ref = new TypeReference<List[]>() { };
String json = objectMapper.writerFor(ref).writeValueAsString(strings);

그러면 배열 유형이 JSON에 추가되고 다시 읽을 수 있습니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Java Jackson은 배열로 직렬화

분류에서Dev

newtonsoft로 json 배열 역 직렬화

분류에서Dev

Jackson : 문자열 배열을 List <T>로 역 직렬화

분류에서Dev

Jackson을 사용하여 JSON 배열을 매핑으로 역 직렬화

분류에서Dev

Jackson ObjectMapper는 배열로 객체를 역 직렬화합니다.

분류에서Dev

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

분류에서Dev

배열 JSON 역 직렬화

분류에서Dev

JSON 배열 배열을 C # 클래스로 역 직렬화

분류에서Dev

배열의 null 값으로 JSON 역 직렬화

분류에서Dev

JSON 배열을 목록으로 역 직렬화

분류에서Dev

C #의 JSON 배열을 목록으로 역 직렬화

분류에서Dev

JSON 배열을 C #으로 역 직렬화

분류에서Dev

Jackson : 열거 형 값을 정수로 직렬화 및 역 직렬화

분류에서Dev

C #에서 List <T> 직렬화 및 js 배열로 역 직렬화

분류에서Dev

Jackson을 사용하여 JSON 배열을 단일 연결 목록으로 역 직렬화하는 방법

분류에서Dev

열거 형 배열로 json 역 직렬화

분류에서Dev

일반 객체를 문자열로 직렬화 / 역 직렬화

분류에서Dev

배열의 JSON 배열 역 직렬화

분류에서Dev

JSON 배열을 C # 개체로 역 직렬화 (TFL API)

분류에서Dev

이름이없는 배열로 C # JSON 역 직렬화

분류에서Dev

json.net 객체 배열로 역 직렬화 C #

분류에서Dev

JSON 개체를 배열로 역 직렬화

분류에서Dev

JSON 개체를 배열로 역 직렬화

분류에서Dev

건너 뛴 요소로 JSON 배열 역 직렬화

분류에서Dev

Json 배열을 나열 (또는) 배열로 역 직렬화하는 방법

분류에서Dev

알 수없는 차원으로 들쭉날쭉 한 배열 역 직렬화

분류에서Dev

JSON 구조를 개체 배열 및 사전으로 역 직렬화

분류에서Dev

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

분류에서Dev

Java OOP의 역 직렬화

Related 관련 기사

  1. 1

    Java Jackson은 배열로 직렬화

  2. 2

    newtonsoft로 json 배열 역 직렬화

  3. 3

    Jackson : 문자열 배열을 List <T>로 역 직렬화

  4. 4

    Jackson을 사용하여 JSON 배열을 매핑으로 역 직렬화

  5. 5

    Jackson ObjectMapper는 배열로 객체를 역 직렬화합니다.

  6. 6

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

  7. 7

    배열 JSON 역 직렬화

  8. 8

    JSON 배열 배열을 C # 클래스로 역 직렬화

  9. 9

    배열의 null 값으로 JSON 역 직렬화

  10. 10

    JSON 배열을 목록으로 역 직렬화

  11. 11

    C #의 JSON 배열을 목록으로 역 직렬화

  12. 12

    JSON 배열을 C #으로 역 직렬화

  13. 13

    Jackson : 열거 형 값을 정수로 직렬화 및 역 직렬화

  14. 14

    C #에서 List <T> 직렬화 및 js 배열로 역 직렬화

  15. 15

    Jackson을 사용하여 JSON 배열을 단일 연결 목록으로 역 직렬화하는 방법

  16. 16

    열거 형 배열로 json 역 직렬화

  17. 17

    일반 객체를 문자열로 직렬화 / 역 직렬화

  18. 18

    배열의 JSON 배열 역 직렬화

  19. 19

    JSON 배열을 C # 개체로 역 직렬화 (TFL API)

  20. 20

    이름이없는 배열로 C # JSON 역 직렬화

  21. 21

    json.net 객체 배열로 역 직렬화 C #

  22. 22

    JSON 개체를 배열로 역 직렬화

  23. 23

    JSON 개체를 배열로 역 직렬화

  24. 24

    건너 뛴 요소로 JSON 배열 역 직렬화

  25. 25

    Json 배열을 나열 (또는) 배열로 역 직렬화하는 방법

  26. 26

    알 수없는 차원으로 들쭉날쭉 한 배열 역 직렬화

  27. 27

    JSON 구조를 개체 배열 및 사전으로 역 직렬화

  28. 28

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

  29. 29

    Java OOP의 역 직렬화

뜨겁다태그

보관