2017-03-20 15 views
0

원형 참조로 JSON을 deserialize해야합니다. 객체의 첫 번째 발생이 있습니다Jackson과 Circular references (Newtonsoft.Json에 의해 직렬화 됨)를 직렬화 해제하려면 어떻게해야합니까?

"$id":"1" 

참고 문헌는 다음과 같다 :

{"$ref":"1"} 

가 @JsonIdentityInfo으로 나는 $ ID를 읽을 수 있지만, 잭슨은 참조를 읽지 않습니다. 수동으로 "$ ref"항목을 삭제하면 비 직렬화가 작동하고 참조 키 자체 만 JSON 문자열에 포함됩니다.

"$ ref"스타일로 Jackson이 참조를 처리하도록하려면 어떻게해야합니까?

답변

0

내 자신의 디시리얼라이저를 시도했지만 꽤 간단한 문제로 인해 복잡해 보입니다.

내가 직렬화하는 클래스는 가져옵니다

@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="$id") 

나는 전체 JSON 문자열을 받아 정규 표현식에 의해 심판 물건을 교체합니다.

String regex = "\\{\\\"\\$ref\\\":\\\"(\\d{1,})*\\\"\\}"; 
Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE | Pattern.DOTALL); 

Matcher matcher = pattern.matcher(jsonString); 
String resultString=""; 
if (matcher.find()) 
{ 
    resultString = matcher.replaceAll("$1"); 
} 

문자열을 교체하는 데 거의 시간이 걸리지 않습니다.