我需要转换来自 here 的 Uber 产品 JSON 响应到一个Java对象。我正在使用 Jackson 进行 JSON 处理。我的输入 JSON 如下所示:
{
"products": [
{
"capacity": 2,
"description": "Ride for less with uberPOOL",
"price_details": {},
"image": "http://d1a3f4spazzrp4.cloudfront.net/car.jpg",
"display_name": "POOL",
"product_id": "26546650-e557-4a7b-86e7-6a3942445247",
"shared": true,
},
{
"capacity": 4,
"description": "The low-cost Uber",
"price_details": {
"distance_unit": "mile",
"cost_per_minute": 0.26,
"service_fees": [
{
"fee": 1.0,
"name": "Safe Rides Fee"
}
],
"minimum": 5.0,
"cost_per_distance": 1.3,
"base": 2.2,
"cancellation_fee": 5.0,
"currency_code": "USD"
},
"cash_enabled": false,
"image": "http://d1a3f4spazzrp4.cloudfront.net/car.jpg",
"display_name": "uberX",
"product_id": "a1111c8c-c720-46c3-8534-2fcdd730040d",
"shared": false
}
]
}
我的实体类如下所示:
public class Products {
@JsonProperty
private int capacity;
@JsonProperty
private String description;
@JsonProperty
private String price_details;
@JsonProperty
private String image;
@JsonProperty
private Boolean cash_enabled;
@JsonProperty
private Boolean shared;
@JsonProperty
private String short_description;
@JsonProperty
private String display_name;
//getter, setter methods
}
包装类看起来像:
public class ProductsModel{
private List <Products> product;
public List<Products> getProduct() {
return product;
}
public void setProduct(List<Products> product) {
this.product = product;
}
}
现在,当我尝试将 JSON 映射到我的 wapper 类并尝试打印产品时..它给出“null”,不确定为什么..请帮助指出原因。
private ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
productsModel = mapper.readValue(line1, ProductsModel.class);
response.getWriter().println("get products:" + productsModel.getProduct()); //<-- returns null - not sure why
最佳答案
使用下面的 Product 和 ProductsModel 类,它会正常工作。
产品条目:
public class Products {
@JsonProperty
private int capacity;
@JsonProperty
private String description;
@JsonProperty
private Map price_details;
@JsonProperty
private String image;
@JsonProperty
private Boolean cash_enabled;
@JsonProperty
private Boolean shared;
@JsonProperty
private String short_description;
@JsonProperty
private String display_name;
}
ProductsModel 包装类:
public class ProductsModel {
private List<Products> products;
public List<Products> getProducts() {
return products;
}
public void setProducts(List<Products> products) {
this.products = products;
}
}
您的代码中有两个错误:
- json 中的 price_details 值是一个对象而不是字符串,因此它应该是一个 Map 或某个 PriceDetails 实体类,其中包含 price_details json 中可用的属性。在我的回复中我只是使用了 map 。
- ProductsModel 包装类中的键名称是 product,它应该是 products。
我刚刚对 Product 和 ProductsModel 类进行了更改,效果很好。
关于java - jackson 与 JSON : receiving "null" object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39313260/