java - jackson 与 JSON : receiving "null" object

标签 java json jackson uber-api

我需要转换来自 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;
    }
}

您的代码中有两个错误:

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

我刚刚对 Product 和 ProductsModel 类进行了更改,效果很好。

关于java - jackson 与 JSON : receiving "null" object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39313260/

相关文章:

java - 使用 jsonpath 表达式的数组大小 - Stefan Goessner JsonPath

json - 使用 serde 生成漂亮的(缩进的)JSON

jquery - 使用 jquery json 对象使用 highchart 创建圆环图

java - 如何忽略 jackson 注释?

maven - Wildfly下加载Jackson JSR310的依赖冲突

java - Jackson 枚举序列化和反序列化

java - 使用 Eclipse 访问现有的 SQLite 数据库

Java 为什么我的程序需要静态变量,它会导致问题吗?

java - 在 Java 中获取同一 URL 的不同响应代码

javascript - 访问 JSON 对象数组内的变量