2017-04-19 45 views
0

反序列化阵列我从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 

回答

1

如果你想使用jackson,这是对我的作品的解决方案:

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

你反序列化类型的多个对象,所以你需要做它作为一个清单,这样

// 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总内存消耗之间的设计决策。

+0

这样工作很好! –

0

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

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