簡體   English   中英

如何使用 Spring Boot WebClient 按名稱獲取 select JSON 字段?

[英]How to get a select JSON fields by name using Spring Boot WebClient?

I'm using WebClient in Java to retrieve the JSON data, but I'm fairly new to JSON and Spring, so I'm not sure how to proceed from here. 我想遍歷 JSON 數據並查找 ProductId 包含“衣服”的產品並將 ProductId 和 ProductName 存儲在列表中。 如何遍歷 JSON 數據並僅檢查字段 ProductId 和 ProductName?

[
{
   "ProductType": "Food",
   "ProductName": "Vineyard Tomatoes",
   "ProductId":"Food-127483"
   "InventoryCount": 128

},
{
   "ProductType": "Clothes",
   "ProductName": "Sweaters",
   "ProductId":"Clothes-2183"
   "InventoryCount": 229

},
{
   "ProductType": "Clothes",
   "ProductName": "Jeans",
   "ProductId":"Clothes-482"
   "InventoryCount": 150

}, 
{
   "ProductType": "Misc",
   "ProductName": "Clocks",
   "ProductId":"Misc-8288"
   "InventoryCount": 24

}
]


String url = inventoryURI //url to the api with the inventory data
List<Products> productList = new ArrayList<>();
WebClient webClient = WebClient.create();
Products[] product = webClient.get().uri(url)
    .accept(MediaType.APPLICATION_JSON)
    .retrieve
    .bodyToMono(Products[].class)
    .block();

如果您使用的是spring-webflux ,則應避免使用.block()

以下是從 JSON 檢索字段的一些方法:

Mono<List<Products>> products = WebClient.create().get()
                                         .uri(url)
                                          .accept(MediaType.APPLICATION_JSON)
                                          .retrieve()
                                          .bodyToMono(String.class)
                                          .map(jsonData -> {
                                           return convertJsonToProducts(jsonData);
                                        });

A. 通過 Gson 庫的方法convertJsonToProducts

public List<Products> convertJsonToProducts(String jsonData) {
    List<Products> products = new ArrayList<Products>();
    Gson gson = new Gson();  
    Products[] productArrays = gson.fromJson(jsonData, Products[].class);
    if(productArrays!=null && productArrays.length>0) {
       products = Arrays.asList(productArrays);
    } 
    return products;
}

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.6</version>
</dependency>

B. 通過 Jackson 庫的方法convertJsonToProducts

public List<Products> convertJsonToProducts(String jsonData) {
    List<Products> products = new ArrayList<Products>();
    ObjectMapper mapper = new ObjectMapper();
    Products[] pp1 = mapper.readValue(jsonData, Products[].class);
    if(productArrays!=null && productArrays.length>0) {
       products = Arrays.asList(productArrays);
    } 
    return products;
}

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.11.2</version>
</dependency>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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