开发者社区 问答 正文

使用JSONPath时JSONReader不能重用,第二次返回是null

使用JSONPath时JSONReader不能重用,第二次返回是null

@Test
public void test_jsonPath() {
    String json = """
            {
               "a":"b"
            }
            """;
    JSONReader reader = JSONReader.of(json);
    String a1 = (String) JSONPath.of("$.a").extract(reader);
    String a2 = (String) JSONPath.of("$.a").extract(reader);
    System.out.println(a1);
    System.out.println(a2);
}

原提问者GitHub用户holmofy

展开
收起
白夜行fighting 2023-04-21 10:39:48 247 发布于北京 分享
分享
版权
举报
2 条回答
写回答
取消 提交回答
  • 就是这样的设计的,如果你要一次读取多个jsonpath,看这个文档 https://github.com/alibaba/fastjson2/wiki/jsonpath_multi_cn

    原回答者GitHub用户wenshao

    2023-04-21 12:44:49 举报
    赞同 评论

    评论

    全部评论 (0)

    登录后可评论
  • 随心分享,欢迎友善交流讨论:)

    当使用JSONReader解析JSON时,它是按顺序读取JSON文本的,而不是像DOM或XPath那样一次性加载整个文档。因此,当你使用JSONReader解析完整个JSON文本时,指针已经到达JSON末尾,如果你想再次使用JSONReader读取JSON,你需要重置指针。

    在Java中,可以使用JSONReader对象的reset()方法来将指针重置到JSON的开头。因此,如果你要多次使用JSONReader解析JSON并使用JSONPath,你需要在每次使用之前重置JSONReader。示例代码如下:

    JSONReader reader = new JSONReader(new StringReader(json)); JSONPath path = JSONPath.compile("$.key"); Object result = path.read(reader); // 使用result reader.reset(); result = path.read(reader); // 使用result 注意,每次调用read()方法都会移动指针,因此如果你想在同一个JSONReader对象中使用多个JSONPath表达式,请确保每个表达式都在上一个表达式的末尾执行之前调用reset()方法。

    2023-04-21 11:04:47 举报
    赞同 评论

    评论

    全部评论 (0)

    登录后可评论
问答分类:
问答地址:
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等