【问题标题】:Jackson - Deserialize Array without property nameJackson - 反序列化没有属性名称的数组
【发布时间】:2017-09-15 18:52:00
【问题描述】:

我收到了来自 shipcloud.io 的以下 JSON 响应:

[
  {
    "name": "dhl",
    "display_name": "Deutsche Post DHL",
    "services": [
      "standard",
      "returns",
      "one_day",
      "one_day_early"
    ],
    "package_types": [
      "parcel",
      "bulk"
    ]
  },
  {
    "name": "dpag",
    "display_name": "Deutsche Post",
    "services": [
      "standard"
    ],
    "package_types": [
      "letter",
      "parcel_letter",
      "books"
    ]
  },
  {
    "name": "dpd",
    "display_name": "DPD - Dynamic Parcel Distribution",
    "services": [
      "standard",
      "returns",
      "one_day",
      "one_day_early"
    ],
    "package_types": [
      "parcel",
      "parcel_letter"
    ]
  }
]

如何使用 Jackson 反序列化这个 JSON 数组?通常我使用一个简单的 POJO 并定义 列表/数组的属性名称(例如@JsonProperty("blub"))。问题是,这里没有使用属性名称...... 我尝试使用空的属性名称,但它不起作用。 我刚刚收到此错误消息:

Can not deserialize instance of Response.CarriersResponse out of 
START_ARRAY token

【问题讨论】:

    标签: java json jackson json-deserialization


    【解决方案1】:

    如果你想使用jackson,这是适合我的解决方案:

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

    【讨论】:

      【解决方案2】:

      您正在反序列化该类型的多个对象,因此您需要将其作为列表进行,像这样

      // somewhere in an example TypeReferences class
      public static final TypeReference<List<Response.CarriersResponse>> CARRIER_RESPONSES = new TypeReference<List<Response.CarriersResponse>>() {
      };
      
      // elsewhere where you're calling the mapper
      List<Response.CarriersResponse> responses = mapper.readValue(text, TypeReferences.CARRIER_RESPONSES);
      

      您可以就地实例化它,但这是性能与总内存消耗之间的设计决定。

      【讨论】:

        【解决方案3】:

        尝试反序列化为Response.CarriersResponse[] 类。

        Response.CarriersResponse[] responses = mapper.readValue(text, Response.CarriersResponse[].class);
        

        【讨论】:

          猜你喜欢
          • 2016-08-15
          • 2018-10-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多