杰克逊 - 无属性名称
问题描述:
反序列化阵列我从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"
]
}
]
我如何反序列化与杰克逊这种JSON阵列?通常我使用一个简单的POJO并定义列表/数组的属性名称(例如@JsonProperty(“blub”))。问题是,这里没有使用属性名称... 我试过它使用空的属性名称,但它没有工作。 我只是收到此错误信息:
Can not deserialize instance of Response.CarriersResponse out of
START_ARRAY token
答
如果你想使用jackson
,这是对我的作品的解决方案:
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, false);
答
你反序列化类型的多个对象,所以你需要做它作为一个清单,这样
// 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);
你可以初始化它在原地的,但是这是性能VS总内存消耗之间的设计决策。
答
尝试反序列化到Response.CarriersResponse[]
类。
Response.CarriersResponse[] responses = mapper.readValue(text, Response.CarriersResponse[].class);
这样工作很好! –