代码如下:
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]",反序列化会丢失
3条答案
按热度按时间k4emjkb11#
源码中com.alibaba.fastjson.JSONPath.JSONPathParser#readSegement方法判断开头是数字就认为是数组
guykilcj2#
什么版本
h9a6wy2h3#
什么版本
1.2.75