你好!
在使用fastjson的JSONPath时,发现如下问题:
1、有一个类Person,
static class Person{
private String name;
private String id;
//get set...
}
2、实例化该类后将id和name的值设置为同一个值,假设值都设置为“id”,而后用JSONPath.paths(Object obj)解析该实例,如下。得到的path只有"/"和"/id",没有"/name"。个人觉得得到的path不应该是"/"、"/id"、"/name"吗?
Person person = new Person();
person.setId("id");
person.setName("id");
Map<String, Object> pathValues = JSONPath.paths(person);
Set<String> paths = pathValues.keySet();
for (String path : paths) {
LOG.info(path);
}
debug下了源码,里面用于用到的是一个Map
Hope to hear from you, sincerely.
使用的fastjson版本是1.2.40,如下:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.40</version>
</dependency>
搜了下其它的issues,没有搜到这个问题。1.2.29版本也有这个问题。
问题已确认,如果value是重复的,会出现这个问题。我要想想怎么修改哈
https://github.com/alibaba/fastjson/releases/tag/1.2.41
新版本已经支持,请使用新版本
ok
@wenshao 这个问题还是没有解决
看了1.2.56版本 只有当value是String/Number/Date/UUID类型时path才会加入结果集 对于其它类型比如Boolean类型 还是存在问题
@wenshao 这个问题还是没有解决
看了1.2.56版本 只有当value是String/Number/Date/UUID类型时path才会加入结果集 对于其它类型比如Boolean类型 还是存在问题
确实是,Boolean类型还是存在, @wenshao
我觉得是不是应该精确判断下?如下
String p = values.put(javaObject, parent);
if (p != null) {
if (p.equels(parent) ) {
return;
}
}
Most helpful comment
问题已确认,如果value是重复的,会出现这个问题。我要想想怎么修改哈