【问题标题】:parse object from JSON depending upon type using jackson [duplicate]使用jackson根据类型从JSON解析对象[重复]
【发布时间】:2016-05-04 21:55:36
【问题描述】:

我有时会得到一个对象,有时会得到一个列表。有没有办法使用 Jackson 库使用相同的 Java 模型来处理以下 2 条 json 消息。

Message1:下面有一个“产品”列表

{
  "id": 1234,
  "products": [
    {
      "producttype":"Household",
      "name": "product1",
      "price": 100
    },
    {
      "producttype":"Electronics",
      "name": "product2",
      "price": 200
    }
  ]
}

Message2:下面的“产品”下有一个元素

{
  "id": 1234,
  "products": {
      "producttype":"Household",
      "name": "product1",
      "price": 100
    }
}

我有以下 Java 模型:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Example
{
    private String id;
    private Products[] products;

    public String getId ()
    {
        return id;
    }

    public void setId (String id)
    {
        this.id = id;
    }

    public Products[] getProducts ()
    {
        return products;
    }

    public void setProducts (Products[] products)
    {
        this.products = products;
    }
}

但是当我尝试将它转换为 Message2 时,这会失败,因为它是一个对象。 ObjectMapper 映射器 = 新 ObjectMapper(); 示例 obj = mapper.readValue(originalMessage, Example.class);

您能帮我处理上述情况吗?

我正在使用以下库:

       <dependency>
          <groupId>org.codehaus.jackson</groupId>
          <artifactId>jackson-mapper-asl</artifactId>
          <version>1.9.13</version>
        </dependency>
        <dependency>
        <groupId>org.codehaus.jackson</groupId>
          <artifactId>jackson-jaxrs</artifactId>
          <version>1.9.13</version>
        </dependency>
        <dependency>
          <groupId>org.codehaus.jackson</groupId>
          <artifactId>jackson-xc</artifactId>
          <version>1.9.13</version>
</dependency>

谢谢!

【问题讨论】:

  • 你可以做你想做的事,但你真的应该告诉任何向你发送 Message2 格式的东西的人停止向你发送不良数据。他们应该发送一个包含单个元素的列表。

标签: java json jackson


【解决方案1】:

您可以使用ACCEPT_SINGLE_VALUE_AS_ARRAY 功能

ObjectMapper mapper = new ObjectMapper(); 
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
Example obj = mapper.readValue(originalMessage, Example.class);

https://fasterxml.github.io/jackson-databind/javadoc/2.7/com/fasterxml/jackson/databind/DeserializationFeature.html#ACCEPT_SINGLE_VALUE_AS_ARRAY

【讨论】:

  • 啊!!.. 太棒了!让我试试。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-05
  • 2014-12-22
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
  • 2020-02-08
相关资源
最近更新 更多