开发者社区> 问答> 正文

使用JSONPath确定节点是否存在?

我使用的是 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

展开
收起
飘飘斯嘉丽 2023-04-21 11:21:44 538 0
1 条回答
写回答
取消 提交回答
  • 问题已修复,请用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

    2023-04-21 14:19:28
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载