请问 不同的JSONPath使用extract方法 提取同一个解析器的内容 第二次extract会得到null值 是BUG嘛 还是设定只能解析一次
@Test public void jsonPathTest() { String seatString = "{\n" + "\t"flightId":"MH8633",\n" + "\t"column":"C",\n" + "\t"row":"19"\n" + "}"; JSONPath rowPath = JSONPath.of("$.row"); JSONPath colPath = JSONPath.of("$.column"); JSONReader parser = JSONReader.of(seatString); String row = (String)rowPath.extract(parser); String col = (String)colPath.extract(parser); System.out.println(row); System.out.println(col); }
原提问者GitHub用户MASON-PRINCE
不同的JSONPath使用extract方法提取同一个解析器的内容,第二次extract会得到null值,这是因为解析器在第一次extract之后已经被清空,无法再次提取内容。这是设定的限制,解析器只能解析一次。如果需要多次提取内容,可以在每次提取之前重新解析原始数据。
要每次都new JSONReader,如下这样写:
@Test
public void jsonPathTest() {
String seatString = "{\n" +
"\t\"flightId\":\"MH8633\",\n" +
"\t\"column\":\"C\",\n" +
"\t\"row\":\"19\"\n" +
"}";
JSONPath rowPath = JSONPath.of("$.row");
JSONPath colPath = JSONPath.of("$.column");
String row = (String)rowPath.extract(JSONReader.of(seatString));
assertEquals("19", row);
String col = (String)colPath.extract(JSONReader.of(seatString));
assertEquals("C", col);
}
你用这个快照版本,支持如下写法
https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/fastjson/2.0.2-SNAPSHOT
@Test
public void test2() {
String seatString = "{\n" +
"\t\"flightId\":\"MH8633\",\n" +
"\t\"column\":\"C\",\n" +
"\t\"row\":\"19\"\n" +
"}";
JSONPath path = JSONPath.of("$['row','column']");
Object result = path.extract(
JSONReader.of(seatString));
assertNotNull(result);
assertEquals("[\"19\",\"C\"]", result.toString());
}
请使用更新版本:https://github.com/alibaba/fastjson2/releases/tag/2.0.2
原回答者GitHub用户wenshao
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。