[英]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.