簡體   English   中英

通過JsonPath數組進行迭代的策略

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM