如何用Jackson反序列化循环引用(由Newtonsoft.Json序列化)?

时间:2017-03-20 10:25:38

标签: java json jackson deserialization circular-reference

我必须使用循环引用反序列化JSON。 第一次出现的对象有:

"$id":"1"

参考文献如下:

{"$ref":"1"}

使用@JsonIdentityInfo我可以使$ id可读,但Jackson不会读取引用。 如果我手动删除“$ ref”内容,则反序列化工作,并且只在JSON字符串中包含引用键。

如何让Jackson以“$ ref”风格处理引用?

1 个答案:

答案 0 :(得分:0)

我尝试了自己的反序列化器,但对于这个非常简单的问题似乎很复杂。

我要反序列化的类得到:

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

我接受整个JSON字符串并用regexp替换ref的东西。

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");
}

更换字符串几乎没时间。