开发者社区> 问答> 正文

使用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 215 0
2 条回答
写回答
取消 提交回答
  • 就是这样的设计的,如果你要一次读取多个jsonpath,看这个文档 https://github.com/alibaba/fastjson2/wiki/jsonpath_multi_cn

    原回答者GitHub用户wenshao

    2023-04-21 12:44:49
    赞同 展开评论 打赏
  • 随心分享,欢迎友善交流讨论:)

    当使用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
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

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