使用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
就是这样的设计的,如果你要一次读取多个jsonpath,看这个文档 https://github.com/alibaba/fastjson2/wiki/jsonpath_multi_cn
原回答者GitHub用户wenshao
当使用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()方法。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。