我使用的是 2.0.11 版本的api
我想使用JSONPath来判断json中某个字段是否存在,并且需要区分 不存在 和 null 这两种情况,比如:
{ "a1":null }
在上面这串json中,我想使用api能做到如下判断
a1存在,且值为 null a2不存在 我尝试了如下api,接入如注释所示:
public class Main {
public static void main(String[] args) { String json = "{"a1": null}"; JSONObject jsonObject = JSON.parseObject(json);
System.out.println(JSONPath.contains(jsonObject, "$.a1")); // false
System.out.println(JSONPath.contains(jsonObject, "$.a2")); // false
System.out.println(JSONPath.eval(jsonObject, "$.a1")); // null
System.out.println(JSONPath.eval(jsonObject, "$.a2")); // null
}
}
我尝试了jayway 的 JsonPath,是通过异常来区分:
public class Main {
public static void main(String[] args) { String json = "{"a1": null}";
Object read1 = JsonPath.read(json, "$.a1");
System.out.println(read1); // null
Object read2 = JsonPath.read(json, "$.a2"); // PathNotFoundException
System.out.println(read2);
}
}
问题:
1、上述fastjson2的代码段的执行结果,是否就是我们设计如此 2、是否有JSONPath相关的api,可以判断/推断某个节点 不存在 or null
原提问者GitHub用户Nailcui
问题已修复,请用2.0.13-SNAPSHOT版本验证 https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/fastjson2/fastjson2/2.0.13-SNAPSHOT/
String json = "{"a1": null}"; JSONObject jsonObject = JSON.parseObject(json);
assertTrue( JSONPath.contains(jsonObject, "$.a1") ); assertFalse( JSONPath.contains(jsonObject, "$.a2") );
原回答者GitHub用户wenshao
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。