首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JSON的Jackson :接收"null“对象

使用JSON的Jackson :接收"null“对象
EN

Stack Overflow用户
提问于 2016-09-04 03:25:21
回答 1查看 1.4K关注 0票数 1

我需要将优步产品JSON响应从这里转换为Java。我使用Jackson来处理JSON。我的输入JSON看起来像:

代码语言:javascript
复制
    {
      "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
        }
      ]
    }

我的实体类看起来像:

代码语言:javascript
复制
    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
    } 

包装类如下所示:

代码语言:javascript
复制
    public class ProductsModel{
        private List <Products> product;

        public List<Products> getProduct() {
            return product;
        }
        public void setProduct(List<Products> product) {
            this.product = product;
        }
    }

现在,当我尝试将JSON映射到我的wapper类并尝试打印产品时。它给了“空”不知道为什么..。请帮忙指出原因。

代码语言:javascript
复制
    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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-04 03:52:31

使用下面的ProductsModel类可以很好地工作。

乘积实体:

代码语言:javascript
复制
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包装器类:

代码语言:javascript
复制
public class ProductsModel {

    private List<Products> products;

    public List<Products> getProducts() {
        return products;
    }

    public void setProducts(List<Products> products) {
        this.products = products;
    }
}

在您的代码中有两个错误:

  1. json中的PriceDetails price_details值是一个对象,而不是字符串,因此它应该是一个映射或一些包含price_details json中可用属性的实体类。在我的回复中,我只是使用了Map。
  2. ProductsModel包装器类中密钥的名称是products,它应该是products。

我刚刚在ProductsModel类中进行了更改,它运行得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39313260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档