在java中;若某个对象属性为 List 的形式,
private List exRsnLst;
且在交互的过程中 需要 转为jsonString的方式 ,会出现"
r
e
f
"
的情况,如下图,
!
[
在这里插入图片描述
]
(
h
t
t
p
s
:
/
/
i
m
g
−
b
l
o
g
.
c
s
d
n
i
m
g
.
c
n
/
372
e
8032
e
e
b
e
486
c
977832527
e
83
c
c
94.
p
n
g
)
经过排查发现:在使用
J
S
O
N
O
b
j
e
c
t
.
t
o
J
S
O
N
S
t
r
i
n
g
(
O
b
j
e
c
t
)
方法时,如果对象中存在循环引用,或者对象包含
L
i
s
t
属性,并且
L
i
s
t
中的元素互相引用,就会出现
"
ref"的情况,如下图, ![在这里插入图片描述](https://img-blog.csdnimg.cn/372e8032eebe486c977832527e83cc94.png) 经过排查发现: 在使用JSONObject.toJSONString(Object)方法时,如果对象中存在循环引用,或者对象包含List属性,并且List中的元素互相引用,就会出现"
ref"的情况,如下图,![在这里插入图片描述](https://img−blog.csdnimg.cn/372e8032eebe486c977832527e83cc94.png)经过排查发现:在使用JSONObject.toJSONString(Object)方法时,如果对象中存在循环引用,或者对象包含List属性,并且List中的元素互相引用,就会出现"ref"字段。
" r e f " 是 J S O N 字符串中用于表示循环引用的特殊字段。当一个对象被序列化为 J S O N 字符串时,如果存在循环引用,为了避免 J S O N 字符串变得无穷无尽,系统会使用 " ref"是JSON字符串中用于表示循环引用的特殊字段。当一个对象被序列化为JSON字符串时,如果存在循环引用,为了避免 JSON 字符串变得无穷无尽,系统会使用" ref"是JSON字符串中用于表示循环引用的特殊字段。当一个对象被序列化为JSON字符串时,如果存在循环引用,为了避免JSON字符串变得无穷无尽,系统会使用"ref"来表示循环引用关系。
如果你不希望出现"$ref"字段,可以考虑进行以下操作:
在定义对象时,避免出现循环引用的情况。确保对象之间的引用关系是有限合理的,而不是形成死循环。
在序列化时,可以尝试使用更高级的库,如Gson或Jackson,这些库对于处理循环引用有更好的支持和控制。
例如,使用Gson库来进行序列化,可以通过配置Gson实例的setExclusionStrategies()方法来避免出现"$ref"字段。以下是一个示例代码:
// 创建Gson实例,并禁用循环引用处理
Gson gson = new GsonBuilder().disableInnerClassSerialization().create();
// 序列化对象
String jsonString = gson.toJson(obj);
经过以上方式就得以解决;