使用 Jackson 反序列化数组 JSON 时出错

希望有人可以提供帮助。Product我正在尝试反序列化从 Prestashop 1.7 的 web 服务中获取的类的 JSON 数组,使用和这样的 url http://myshop.com/api/products/?display=full&filter[reference]=[0003]&output_format=JSON。JSON输出是这样的


{

"products": [{

        "id": 1,

        "id_manufacturer": "0",

        "id_supplier": "0",

        "id_category_default": "2",

        "new": null,

        "cache_default_attribute": "0",

        "id_default_image": "",

        "id_default_combination": 0,

        "id_tax_rules_group": "3",

        "position_in_category": "0",

        "manufacturer_name": false,

        "quantity": "0"

    },

    {

        "id": 2,

        "id_manufacturer": "0",

        "id_supplier": "0",

        "id_category_default": "2",

        "new": null,

        "cache_default_attribute": "0",

        "id_default_image": "",

        "id_default_combination": 0,

        "id_tax_rules_group": "3",

        "position_in_category": "0",

        "manufacturer_name": false,

        "quantity": "0"

    }

]

}


该类Products只是List类Product定义中的一个,如下所示:


public class Products  {


    private List <Product> products;


    public Products() {

        super();

    }


    public List<Product> getProducts(){

        return this.products;

    }

    public void setProducts(List<Product> products){

        this.products = products;

    }

}


芜湖不芜
浏览 191回答 2
2回答

噜噜哒

如果您的输入 JSON 有额外的字段,您可以使用以下任何一种方法来允许反序列化:您可以将整个 ObjectMapper 配置为不会在额外字段上失败:ObjectMapper mapper = new ObjectMapper() .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);Products&nbsp;products&nbsp;=&nbsp;mapper.readValue(url,&nbsp;Products.class);使用 @JsonIgnoreProperties(ignoreUnknown = true) 注释您的 Product 类

千万里不及你

我想你可能明白这一点,但在基本层面上,你做错了。类中的字段名称必须与 JSON 中的字段名称完全匹配,或者您必须使用@JsonProperty注解来识别 JSON 中的确切字段名称。下面是一个示例,展示了如何将newJSON 中的字段映射到您的对象:public class Product{&nbsp; @JsonProperty("new")&nbsp; private String _new;}请注意,@JsonProperty注释中的名称与 JSON 中的字段名称完全匹配。只要这成立,JAVA 字段的实际名称就无关紧要。这也适用于“新”领域:public class Product{&nbsp; @JsonProperty("new")&nbsp; private String thisFieldNameDoesNotMatter;}编辑:添加了其他详细信息以反映对问题的编辑。您的问题的答案是:注意。实际阅读杰克逊给你的错误:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:&nbsp;Unrecognized field "delivery_in_stock"... additional details included by Jackson, but deleted here.Jackson 错误消息标识 JSON 中有一个名为“delivery_in_stock”的无法识别的字段。添加一个字段以包含来自 JSON 的“delivery_in_stock”字段值,或者使用此注释指示 Jackson 忽略未映射的属性:@JsonIgnoreProperties(ignoreUnknown = true)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java