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

7rtdyuoh  于 9个月前  发布在  其他
关注(0)|答案(3)|浏览(99)

代码如下:

  1. class XX {
  2. int a;
  3. public int getA() {
  4. return a;
  5. }
  6. public void setA(int a) {
  7. this.a = a;
  8. }
  9. }
  10. Map<String, Object> result = new HashMap<>();
  11. XX a = new XX();
  12. a.a = 100;
  13. List< XX> t = Arrays.asList(a);
  14. Map<String, Object> y = new HashMap<>();
  15. y.put("2_wdk", t);
  16. Map<String, Object> x = new HashMap<>();
  17. x.put("y", y);
  18. result.put("a.b.c", x);
  19. result.put("x", a);
  20. String s = JSON.toJSONString(result);
  21. System.out.println(s); // {"a.b.c":{"y":{"2\\_wdk":[{"a":100}]}},"x":{"$ref":"$.a\\.b\\.c.y.2\\\\\\_wdk[0]"}}
  22. JSONObject revert = JSON.parseObject(s);
  23. 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]",反序列化会丢失

k4emjkb1

k4emjkb11#

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

guykilcj

guykilcj2#

什么版本

h9a6wy2h

h9a6wy2h3#

什么版本

1.2.75

相关问题