A 项目服务中未设置: DisableCircularReferenceDetect
,这样得到了带有引用的 JSON 字符串。
在另一个 B 项目中,使用上述引用的 JSON 字符串,无法再反解析回去了,下面给出一个示例。
A 服务提供的 JSON 字符串:
{
"code": 0,
"msg": "ok",
"data":
[
{
"a": 100,
"b": 200,
"c":
{
"m": 50,
"n": 100
}
},
{
"$ref": "$.data[0].c"
}
]
}
我尝试这样反解析
JSONObject jsonObject = JSON.parseObject(str);
System.out.println("jsonObject = " + jsonObject);
当然,用哪个 fastjson 的版本解析后均和上述一样。
jsonObject = {"code":0,"msg":"ok","data":[{"a":100,"b":200,"c":{"m":50,"n":100}},{"$ref":"$.data[0].c"}]}
估计是 JSON 字符串内容中,键值的内容本身就是 "$ref": "$.data[0].c"
可实际应用想将引用转为实际的信息,那么理想中的数据应为:
{
"code": 0,
"msg": "ok",
"data":
[
{
"a": 100,
"b": 200,
"c":
{
"m": 50,
"n": 100
}
},
{
"m": 50,
"n": 100
}
]
}
不知现在是否支持这样解析?或者后续是否会有这样的设置🤔
3条答案
按热度按时间rxztt3cl1#
https://github.com/alibaba/fastjson2/releases/tag/2.0.19
请用新版本验证
vyu0f0g12#
系统:win10
JDK:1.8.0_321
Fastjson: 2.0.20
也出现上述问题,@ref反序列化后得到的是$ref指向的地址
Fastjson版本降到1.2.83后$ref反序列化后得到的是null,但是存在富文本反序列化卡死问题,在1.2.83基础上增加Feature.DisableSpecialKeyDetect来进行序列化卡死问题得到解决,但是@ref反序列化后得到的又是$ref指向的地址
这个问题能优先修复吗?
bgtovc5b3#
#4457
稳定复现逻辑