3 回答

TA貢獻1816條經驗 獲得超6個贊
您的 JSON 文件中有一個產品列表。您正在反序列化一個具有 3 個字段的對象。這些字段都不是在產品下,但您忽略了缺少的字段。
嘗試反序列化為包含 Product 列表的新類。刪除 @JsonRootName

TA貢獻2051條經驗 獲得超10個贊
您正在嘗試反序列化 JSON 數組。也不要省略 setter,因為這個變量的訪問是私有的。你可以參考下面的代碼。我已經檢查過了,我能夠正確地反序列化它。
@JsonIgnoreProperties(ignoreUnknown = true)
class Product {
private Integer id;
private String productSku;
private String productInventory;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getProductSku() {
return productSku;
}
public void setProductSku(String productSku) {
this.productSku = productSku;
}
public String getProductInventory() {
return productInventory;
}
public void setProductInventory(String productInventory) {
this.productInventory = productInventory;
}
}
class Products{
private List<Product> products;
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
}
public class Main{
public static void main(String[] args) throws Exception{
String jsonString =
"{\n"
+ " \"products\": [\n"
+ " {\n"
+ " \"id\": 1,\n"
+ " \"productSku\": \"123\",\n"
+ " \"productInventory\": \"24\"\n"
+ " },\n"
+ " {\n"
+ " \"id\": 2,\n"
+ " \"productSku\": \"12350\",\n"
+ " \"productInventory\": \"22\"\n"
+ " },\n"
+ " {\n"
+ " \"id\": 3,\n"
+ " \"productSku\": \"12351\",\n"
+ " \"productInventory\": \"19\"\n"
+ " }\n"
+ " ]\n"
+ "}";
ObjectMapper mapper = new ObjectMapper();
Products products = mapper.readValue(jsonString, Products.class);
// To just access list of ids
List<Product> productsList= products.getProducts();
List<Integer> productIds = new ArrayList<>();
for(Product product : productsList){
productIds.add(product.getId());
}
System.out.println(productIds);
}
}

TA貢獻1813條經驗 獲得超2個贊
您有一個對象,該對象內部是一個對象列表。IE
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonRootName(value = "products")
public class Products {
private List<Product> products;
public List<Product> getProducts() {
return products;
}
public void setProducts(final List<Product> products) {
this.products = products;
}
}
public class Product{
.....
}
ObjectMapper objectMapper = new ObjectMapper();
Products product = objectMapper.readValue("json here....", Products.class);
System.out.println(product.getProducts().size());
添加回答
舉報