2014-11-05 2 views
1

원형 의존성을 가진 객체 그래프를 JSON에 직렬화 할 때 JSON이 무한히 커지지 않도록하려면 어떻게 든 대처해야합니다. 잭슨 개체의 신원을 추적하는 기능을 제공하며 즉시 객체가 두 번째로 직렬화되는대로 참조를 사용되고있는 다음과 같은 클래스의 목록을 고려 예를 here.JSON 직렬화의 사용자 정의 객체 ID

에 대한 참조 직렬화

@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id") 
public class FooBar 
{ 
    public String foo; 
} 

같은 객체 목록을 여러 번에있는 경우, 이것은 당신이 strongely 입력 환경에있을 때 당신은 객체의 구조를 알고있는 경우 다음과 같은 직렬화 된 JSON 문자열

[ 
    { 
    "@id": 1, 
    "foo":"bar" 
    }, 
    { 
    "@id": 2, 
    "foo":"baz" 
    }, 
    1 //reference to the object with @id = 1 
] 

결과 이 JSON에서 deserialised하고 싶다면, 이것은 문제가되지 않습니다. 그러나 구조를 모르는 경우 어떤 항목이 참조이고 간단한 정수인지 전혀 알 수없는 문제가 있습니다. 맞습니까?

지금, 아주 간단한 해결책이 같은 JSON 모양이하는 것입니다 :

[ 
    { 
    "@id": 1, 
    "foo":"bar" 
    }, 
    { 
    "@id": 2, 
    "foo":"baz" 
    }, 
    { 
    "@ref":1 
    } 
] 

당신은 단순히 전체 개체 그래프를 통해 이동하고 회원 @ref이있는 경우 각 개체에 대해 확인할 수 있습니다이 방법을, 그렇다면 해당 객체로 바꿉니다.

두 번째 예제처럼 보이는 JSON을 생성하고 싶습니다. 아무도 이미 이것을 했습니까? 그렇지 않은 경우 정확한 시작 지점은 사용자 정의 ObjectIdGenerator 또는 사용자 정의 직렬화 기일 것입니까? https://github.com/jsog/jsog-jackson

프로토콜 자세한 내용은 여기 :

답변

0

예, 나는 JSOG라고 불렀다 루비, 파이썬에서 https://github.com/jsog/jsog

추가 구현하고, 자바 스크립트 : https://github.com/jsog

그러나 잭슨의 구현은 직렬화 (deserialization 작동 방법을 알아낼 수 없었습니다.) 다른 구현은 완료되었습니다.