Jackson with JSON : 收到 "null" 对象
Jackson with JSON : receiving "null" object
我需要将 Uber Products JSON 响应从 here 转换为 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
}
]
}
我的实体 class 看起来像:
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
}
和包装器 class 看起来像:
public class ProductsModel{
private List <Products> product;
public List<Products> getProduct() {
return product;
}
public void setProduct(List<Products> product) {
this.product = product;
}
}
现在当我尝试将 JSON 映射到我的 wapper class 并尝试打印产品时..它给出 "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 class 它会正常工作。
产品条目:
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 包装器 class:
public class ProductsModel {
private List<Products> products;
public List<Products> getProducts() {
return products;
}
public void setProducts(List<Products> products) {
this.products = products;
}
}
你的代码有两个错误:
- price_details 中的值 json 是对象而非字符串,因此它应该是 Map 或一些 PriceDetails 实体 class,其中包含 price_details json 中可用的属性。在我的回复中,我只是使用了地图。
- ProductsModel 包装器 class 中的键名是 product 它应该是 products.
我刚刚对 Product 和 ProductsModel 进行了更改 class,并且效果很好。
我需要将 Uber Products JSON 响应从 here 转换为 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
}
]
}
我的实体 class 看起来像:
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
}
和包装器 class 看起来像:
public class ProductsModel{
private List <Products> product;
public List<Products> getProduct() {
return product;
}
public void setProduct(List<Products> product) {
this.product = product;
}
}
现在当我尝试将 JSON 映射到我的 wapper class 并尝试打印产品时..它给出 "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 class 它会正常工作。
产品条目:
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 包装器 class:
public class ProductsModel {
private List<Products> products;
public List<Products> getProducts() {
return products;
}
public void setProducts(List<Products> products) {
this.products = products;
}
}
你的代码有两个错误:
- price_details 中的值 json 是对象而非字符串,因此它应该是 Map 或一些 PriceDetails 实体 class,其中包含 price_details json 中可用的属性。在我的回复中,我只是使用了地图。
- ProductsModel 包装器 class 中的键名是 product 它应该是 products.
我刚刚对 Product 和 ProductsModel 进行了更改 class,并且效果很好。