可以通过选项 DisableCircularReferenceDetect
来禁止循环引用检测:
JSON.toJSONString(...,SerializerFeature.DisableCircularReferenceDetec);
循环引用很多场景中,我们需要序列化的对象中存在循环引用,在许多的json库中,这会导致stackoverflow
。在功能强大的fastjson中,你不需要担心这个问题。例如:
A a = new A();
B b = new B(a);
a.setB(b);
String text = JSON.toJSONString(a); // {"b":{"a":{"$ref":".."}}}
A a1 = JSON.parseObject(text, A.class);
Assert.assertTrue(a1 == a1.getB().getA());
引用是通过$ref
来表示的
引用 | 描述 |
---|---|
"$ref":".." | 上一级 |
"$ref":"@" | 当前对象,也就是自引用 |
"$ref":"$" | 根对象 |
"$ref":"$.children.0" | 基于路径的引用,相当于 root.getChildren().get(0) |