为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

芜湖不芜 2022-05-20 18:38:25
希望有人可以提供帮助。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;    }}
查看完整描述

2 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

如果您的输入 JSON 有额外的字段,您可以使用以下任何一种方法来允许反序列化:

  1. 您可以将整个 ObjectMapper 配置为不会在额外字段上失败:

    ObjectMapper mapper = new ObjectMapper() .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

    Products products = mapper.readValue(url, Products.class);
  2. 使用 @JsonIgnoreProperties(ignoreUnknown = true) 注释您的 Product 类


查看完整回答
反对 回复 2022-05-20
?
千万里不及你

TA贡献1784条经验 获得超9个赞

我想你可能明白这一点,但在基本层面上,你做错了。


类中的字段名称必须与 JSON 中的字段名称完全匹配,或者您必须使用@JsonProperty注解来识别 JSON 中的确切字段名称。下面是一个示例,展示了如何将newJSON 中的字段映射到您的对象:


public class Product

{

  @JsonProperty("new")

  private String _new;

}

请注意,@JsonProperty注释中的名称与 JSON 中的字段名称完全匹配。只要这成立,JAVA 字段的实际名称就无关紧要。这也适用于“新”领域:


public class Product

{

  @JsonProperty("new")

  private String thisFieldNameDoesNotMatter;

}

编辑:添加了其他详细信息以反映对问题的编辑。


您的问题的答案是:注意。


实际阅读杰克逊给你的错误:


com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: 

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)


查看完整回答
反对 回复 2022-05-20
  • 2 回答
  • 0 关注
  • 190 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信