[英]Strategies for iterating through JsonPath array
我今天才开始探索JsonPath。 我不仅想探索使用它的可能性,还想探索一些有效的策略。
例如,假设我必须遍历json字符串中一个元素内包含的数组。
我正在使用https://github.com/jayway/JsonPath#path-examples中的“商店”示例。
为了获得书籍本身的清单,我想我可以做这样的事情:
List<?> allBooks = JsonPath.<List<?>>read(context, "$.store.book");
这样考虑是否有意义?
这是我不确定的逻辑。
我本以为可以定义一个“ Book” pojo,然后执行以下操作:
for (int ctr = 0; ctr < allBooks.size(); ++ ctr) {
Book book = JsonPath.<Book>read(context, ".[" + ctr + "]");
System.out.println("book[" + book + "]");
}
但是,这不起作用。 此时的“ read
”方法返回一个JSONArray
。
代码示例的最后一行位于https://github.com/jayway/JsonPath#what-is-returned-when与我正在查看的内容接近,但这需要在每次迭代中解析json。 似乎“ DocumentContext
”类具有“ read
”方法,这些方法可以采用类型参数,而不能采用“ JsonPath
”。
导航类似的东西有哪些合理的策略?
毫无疑问,JSON路径只会返回一个Maps
列表。 您需要一种方法来告诉它如何将这些值映射到对象-为此,您将需要自定义配置。 还有其他提供商,例如Gson等,但我只用过Jackson。
Configuration configuration = Configuration
.builder()
.jsonProvider(new JacksonJsonProvider())
.mappingProvider(new JacksonMappingProvider())
.build();
第二步是使用TypeRef
指定通用类型信息,并在读取标签时将其传递。
List<Book> allBooks = JsonPath.using(configuration)
.parse(context)
.read("$.store.book", new TypeRef<List<Book>>() {});
结果,您得到一个不错的Book
对象列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.