fastjson 无法反序列化对象引用-探讨

k4emjkb1  于 4个月前  发布在  其他
关注(0)|答案(3)|浏览(66)

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
        }
    ]
}

不知现在是否支持这样解析?或者后续是否会有这样的设置🤔

vyu0f0g1

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指向的地址

这个问题能优先修复吗?

相关问题