FastJson解析引起的线上故障

书中人 2020年02月20日 2,180次浏览

JSON解析案例

一个血淋漓的线上问题处理过程
今天处理了工单,用户参数报错,数据层报出的。
然后通过不断的研究fastjson的代码,终于发现了罪魁祸首,竟然是 $ref 惹的祸。
用户输入的参数里有一个{"ref":"ref":"[0]"} ,笔记一下。

下面介绍一些引用的描述:
    "$ref":".." 上一级
    "$ref":"@" 当前对象,也就是自引用
    "$ref":"$" 根对象
    "$ref":"$.children.0" 基于路径的引用,相当于 root.getChildren().get(0)
        String jsonStr = "[{\"a\":\"aa\"},{\"$ref\":\"$[0]\"}]";
        JSONArray objects = JSON.parseArray(jsonStr);
        for (Object object : objects) {
            System.out.println(object);//输出:{"a":"aa"},{"a":"aa"}
        }