[alibaba/fastjson]引用路径的key最后一个单词开头是数字时,反序列化字段值丢失

2024-09-06 231 views
4

代码如下:

        class XX {
                int a;
                public int getA() {
                    return a;
                }
                public void setA(int a) {
                    this.a = a;
                }
            }
        Map<String, Object> result  = new HashMap<>();
        XX a = new  XX();
        a.a = 100;
        List< XX> t = Arrays.asList(a);
        Map<String, Object> y = new HashMap<>();
        y.put("2_wdk", t);
        Map<String, Object> x = new HashMap<>();
        x.put("y", y);
        result.put("a.b.c", x);
        result.put("x", a);
        String s = JSON.toJSONString(result);
        System.out.println(s); // {"a.b.c":{"y":{"2\\_wdk":[{"a":100}]}},"x":{"$ref":"$.a\\.b\\.c.y.2\\\\\\_wdk[0]"}}
        JSONObject revert = JSON.parseObject(s);
        System.out.println(JSON.toJSONString(revert)); // {"a.b.c":{"y":{"2\\_wdk":[{"a":100}]}},"x":[]}

对于key=2_wdk这种数字开头,$ref="$.a\.b\.c.y.2\\\_wdk[0]",反序列化会丢失

回答

1

源码中com.alibaba.fastjson.JSONPath.JSONPathParser#readSegement方法判断开头是数字就认为是数组

image

8

什么版本

6

什么版本

1.2.75