동일한 JSON 내에서 두 개체를 직렬화 한 다음 Redis를 통해 수신 문자열에서 역 직렬화

앤드류 R.

우리 개발 팀의 jackson과 몇 가지 문제가 있습니다.

중요하지 않은 맥락 우리는 jackson을 처음 접했고 과거에 몇 가지 문제가 있었지만 항상 인터넷을 통해 얻은 문제와 StackOverflow를 통해 해결 된 과거 문제로 문제를 해결하려고 노력했습니다.

유용한 정보 우리는 자바 인스턴스 객체를 JSON으로 파싱하여 redis를 통해 문자열로 보낸 다음 pub / sub 시스템을 통해 다른 쪽 끝에서 원래 유형의 객체로 다시 가져올 수 있습니다.

각각 다른 객체를 나타내는 2 개의 필드가 있습니다.

Data: a ChannelMessage object.
String senderName, message;
Enum:ServerType serverType;

Metadata: a RedisMetadata object.
String id, channelName, serverId;
Enum:MessageType type;

따라서 JSON은 다음과 비슷해야합니다.

{
  "data": {
    "senderName": "PixelDev1729",
    "message": "asd",
    "serverType": "HUB"
  },
  "metadata": {
    "id": "1bba40f5-74ed-4ab8-ad81-83078ac11421",
    "channelName": "global-chat",
    "serverId": "b4409522-6a97-47f5-ad75-661ed86c52e8",
    "type": "SEND"
  }
}

몇 가지 골칫거리 우리는 객체에서 값을 문자열로 쓰는 ObjectNode를 사용해 보았습니다.

이스케이프 (백 슬래시)가 많은 JSON 문자열이 정말 엉망이되었습니다.

{"data":"{\"senderName\":\"PixelDev1729\",\"message\":\"asd\",\"serverType\":\"HUB\"}","metadata":"{\"id\":\"e0f77d09-cafa-4ff5-b553-0f0dc4bb76e3\",\"cha|

nnelName ":"global-chat ","serverId ":"9f10cf0b-d3eb-4804-98aa-92d747d75f5e ","type ":"SEND "}"}

  1. "문자열 값에서 역 직렬화 할 문자열 인수 생성자 / 팩토리 메서드가 없습니다 (열 : 1, 줄 : 1)." 내 전문 지식에서 Jackson이 얻는 JSON 문자열이 유효하지 않다고 말할 수 있습니다.

너무 다른 접근 방식 ...

jsonString.replaceAll("^\"|\"$|\\\\", "");우리가 먼저 얻은 동일한 문자열을 사용 합니다.

거의 유효한 JSON을 얻었지만 일부 큰 따옴표가 누락되었으므로 여전히 유효하지 않습니다.

{ "data": " {"senderName ":"wasmake ","message ":"sadasdas ","serverType ":"VALHEIM "} " , "metadata": " {"id ":"410c429c-06a4-466a- bce2-5edd63fabe17 ", |"channelName ":"global-chat ","serverId ":"640d01c3-5b13-4dcf-84bc-1d6b2987b333 ","type ":"SEND "} " }

  1. 예기치 않은 문자 ( 's'(코드 115)) : 개체 항목을 구분하는 데 쉼표가 필요했습니다.

데이터 " S enderName" 의 첫 번째 필드에서 이상한 일을하는 큰 따옴표 .

암호:

jackson을 사용하여 객체를 JSON으로 직렬화하여 Redis를 통해 메시지를 보내는 방법 : ( https://user-images.githubusercontent.com/8813159/104827760-06717600-5827-11eb-8cd6-48554db93c49.png )

redis에서받은 메시지에서 객체를 얻기 위해 jackson을 사용하여 JSON을 역 직렬화하는 방법 : ( https://user-images.githubusercontent.com/8813159/104827779-45073080-5827-11eb-84fc-47673c395b69.png )

RedisMetadata 클래스 : ( https://user-images.githubusercontent.com/8813159/104827795-5cdeb480-5827-11eb-9595-c9326ca59e3f.png )

콘솔 로그 :

( https://user-images.githubusercontent.com/8813159/104827799-66681c80-5827-11eb-8801-4c107df0dcb6.png )

( https://user-images.githubusercontent.com/8813159/104827801-6d8f2a80-5827-11eb-9170-80635c74110f.png )

우리는 모든 것을 시도했지만 행운이 없기 때문에 도움의 손길을 정말 감사드립니다. 미리 감사드립니다!

길 베르토 가르시아

문제는 바로 거기에 있습니다직렬화 부분

보시다시피 데이터 및 메타 데이터 값은 문자열로 변환 된 다음 기본 ObjectNode로 설정됩니다.

문제는 직렬화되지 않은 경우 실제로 값의 트리 형태가 아닌 문자열 값 (실제로 어떻게 호출되는지 모르겠 음)으로 변환되고 ObjectMapper#treeToValue. 이 솔루션은과 ObjectNode으로 값을 변환하는 것입니다 ObjectMapper#valueToTree그리고 그것을 설정 ObjectNode#set(String, JsonNode).

다른 해결책은 ObjectMapper#treeToValueuse 사용 하여 직접 변환하는 대신 deserialization 부분을 변경하는 것입니다 ObjectMapper#readValue.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

xml 문서를 역 직렬화 할 수 있지만 동일한 문서로 직렬화 할 수 없음

분류에서Dev

JSON 문자열에서 선택한 JSON 개체 역 직렬화

분류에서Dev

C #에서는 간단한 JSON 개체를 정수 목록으로 역 직렬화합니다.

분류에서Dev

Json .Net은 플랫 객체를 복잡한 객체로 직렬화합니다 (직렬화 / 역 직렬화에 대한 객체 구조 변경).

분류에서Dev

컨트롤러에서 json 개체를 역 직렬화 할 수 없습니다.

분류에서Dev

spring-data-rest 및 컨트롤러는 직렬화 / 역 직렬화에 동일한 objectMaper를 사용합니다.

분류에서Dev

파일에서 개체를 역 직렬화 및 재 직렬화하는 데 문제가있는 C # JSON.net

분류에서Dev

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

분류에서Dev

clrmq를 통한 직렬화 및 역 직렬화

분류에서Dev

결과에 대한 액세스를 Json 역 직렬화

분류에서Dev

메타 클래스를 통해 인스턴스화 된 인스턴스에 대한 JSON 개체 직렬화

분류에서Dev

부스트를 사용하여 문자열 배열을 역 직렬화하고 예상보다 큽니다 (cv :: cuda :: GpuMat에서 직렬화 한 후).

분류에서Dev

BinaryFormatter를 통한 MemoryStream 역 직렬화

분류에서Dev

양쪽 끝에서 동일한 클래스를 사용하여 C #에서 JSON을 역 직렬화 할 수 없습니다.

분류에서Dev

C # 개체 오류에 대한 JSON 응답 역 직렬화

분류에서Dev

문자열을 메서드에 전달하고 json으로 변환 한 다음 .net에서 역 직렬화

분류에서Dev

MD5 해시 용 Python + JSON 직렬화-두 개의 동등한 객체가 정확히 동일한 문자열로 직렬화된다는 것을 어떻게 보장 할 수 있습니까?

분류에서Dev

다양한 유형의 객체를 포함하는 JSON 배열 역 직렬화

분류에서Dev

개체 역 직렬화와 LINQ를 모두 시도한 XML 개체 및 자식을 구문 분석 할 수 없습니다.

분류에서Dev

자식 개체 및 형제 개체에서 개체 이름이 동일한 XML Serializer를 사용하여 개체를 직렬화 할 수 없습니다.

분류에서Dev

한 클래스에서 다른 JSON 데이터 역 직렬화

분류에서Dev

C #에서 Newtonsoft를 사용하여 Json에서 중첩 된 개체의 효율적인 수동 역 직렬화

분류에서Dev

JAXB 역 직렬화를 통한 개체 생성 사용자 지정

분류에서Dev

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

분류에서Dev

Json.net은 컴포지션에서 동시 수집으로 복잡한 객체를 역 직렬화합니다.

분류에서Dev

C # 단일 개체에서 두 Jarray 개체 역 직렬화

분류에서Dev

복잡한 JSON 개체 역 직렬화

분류에서Dev

C #에서 JSON 개체 역 직렬화

분류에서Dev

하나의 클래스에서 가능한 여러 개체 이름으로 JSON 문자열 역 직렬화

Related 관련 기사

  1. 1

    xml 문서를 역 직렬화 할 수 있지만 동일한 문서로 직렬화 할 수 없음

  2. 2

    JSON 문자열에서 선택한 JSON 개체 역 직렬화

  3. 3

    C #에서는 간단한 JSON 개체를 정수 목록으로 역 직렬화합니다.

  4. 4

    Json .Net은 플랫 객체를 복잡한 객체로 직렬화합니다 (직렬화 / 역 직렬화에 대한 객체 구조 변경).

  5. 5

    컨트롤러에서 json 개체를 역 직렬화 할 수 없습니다.

  6. 6

    spring-data-rest 및 컨트롤러는 직렬화 / 역 직렬화에 동일한 objectMaper를 사용합니다.

  7. 7

    파일에서 개체를 역 직렬화 및 재 직렬화하는 데 문제가있는 C # JSON.net

  8. 8

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

  9. 9

    clrmq를 통한 직렬화 및 역 직렬화

  10. 10

    결과에 대한 액세스를 Json 역 직렬화

  11. 11

    메타 클래스를 통해 인스턴스화 된 인스턴스에 대한 JSON 개체 직렬화

  12. 12

    부스트를 사용하여 문자열 배열을 역 직렬화하고 예상보다 큽니다 (cv :: cuda :: GpuMat에서 직렬화 한 후).

  13. 13

    BinaryFormatter를 통한 MemoryStream 역 직렬화

  14. 14

    양쪽 끝에서 동일한 클래스를 사용하여 C #에서 JSON을 역 직렬화 할 수 없습니다.

  15. 15

    C # 개체 오류에 대한 JSON 응답 역 직렬화

  16. 16

    문자열을 메서드에 전달하고 json으로 변환 한 다음 .net에서 역 직렬화

  17. 17

    MD5 해시 용 Python + JSON 직렬화-두 개의 동등한 객체가 정확히 동일한 문자열로 직렬화된다는 것을 어떻게 보장 할 수 있습니까?

  18. 18

    다양한 유형의 객체를 포함하는 JSON 배열 역 직렬화

  19. 19

    개체 역 직렬화와 LINQ를 모두 시도한 XML 개체 및 자식을 구문 분석 할 수 없습니다.

  20. 20

    자식 개체 및 형제 개체에서 개체 이름이 동일한 XML Serializer를 사용하여 개체를 직렬화 할 수 없습니다.

  21. 21

    한 클래스에서 다른 JSON 데이터 역 직렬화

  22. 22

    C #에서 Newtonsoft를 사용하여 Json에서 중첩 된 개체의 효율적인 수동 역 직렬화

  23. 23

    JAXB 역 직렬화를 통한 개체 생성 사용자 지정

  24. 24

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

  25. 25

    Json.net은 컴포지션에서 동시 수집으로 복잡한 객체를 역 직렬화합니다.

  26. 26

    C # 단일 개체에서 두 Jarray 개체 역 직렬화

  27. 27

    복잡한 JSON 개체 역 직렬화

  28. 28

    C #에서 JSON 개체 역 직렬화

  29. 29

    하나의 클래스에서 가능한 여러 개체 이름으로 JSON 문자열 역 직렬화

뜨겁다태그

보관