gpt4 book ai didi

java - 遍历 JsonPath 数组的策略

转载 作者:行者123 更新时间:2023-11-30 02:36:16 28 4
gpt4 key购买 nike

我今天刚刚开始探索 JsonPath。我不仅想探索它可以做什么,还想探索一些有效的策略。

例如,假设我必须迭代 json 字符串中一个元素中包含的数组。

我正在使用 https://github.com/jayway/JsonPath#path-examples 中的“store”示例.

要获取书籍列表本身,我想我可以这样做:

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 对象列表。

关于java - 遍历 JsonPath 数组的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42986914/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com