![](/img/trans.png)
[英]Jackson: Deserialize JSON array from JSON object into Java List
[英]deserialize a json array into a java object holding list
好的,所以我有點搞砸了。 我正在得到一個JSON數組,將對象看起來像這樣: [{ "id": "1", "name": "some name", "url": "some url", "active": true }, { "id": "2", "name": "some other name", "url": "some other url", "active": true } ]"
現在,我希望能夠將該數組反序列化為一個包含數組中對象列表的java對象。 我制作了一個自定義解串器,如下所示:
public class ListSerializer extends JsonDeserializer<List<Provider>>{
private static final long serialVersionUID = 9114152571639338391L;
@Override
public List<Provider> deserialize(JsonParser jsonParser,
DeserializationContext arg1) throws IOException, JsonProcessingException {
// TODO Auto-generated method stub
final ObjectCodec objectCodec = jsonParser.getCodec();
final JsonNode listOrObjectNode = objectCodec.readTree(jsonParser);
final List<Provider> result = new ArrayList<Provider>();
for (JsonNode node : listOrObjectNode) {
result.add(objectCodec.treeToValue(node, Provider.class));
}
return result;
}
}
包含該列表的類如下所示:
public class ProviderList {
@JsonDeserialize(using = ListSerializer.class)
private List<Provider> providerList;
public List<Provider> getProviderList() {
return providerList;
}
public void setProviderList(final List<Provider> providerList) {
this.providerList = providerList;
}
}
現在,我知道這可能是一個愚蠢的做法,但總而言之,這只是需要的。 我顯然做錯了,因為我收到此錯誤:
無法在[來源:[{“ id”:“ 1”,“名稱”:“ Posttrack”,“ url”:“ http:\\”的START_ARRAY令牌中反序列化com.wirelesscar.trailser.v1_0.domain.ProviderList實例。 dev.posttrack.com“,” active“:true},{” id“:” 2“,” name“:” Trackunit“,” url“:” http:\\ dev.trackunit.com“,” active“:真正}]; 行:1,列:1]
所以我的問題。 這可能嗎? 我在哪里錯了。
提前致謝!
您可以使用TypeReference包裝器直接將其反序列化為列表。
@Data
public class Provider {
private Long id;
private String name;
private String url;
private boolean active;
}
@Data
public class ProviderList {
List<Provider> providerList;
}
public class JsonTest {
@Test
public void test() {
String json = "[{\n" +
" \"id\": \"1\",\n" +
" \"name\": \"some name\",\n" +
" \"url\": \"some url\",\n" +
" \"active\": true\n" +
" }, {\n" +
" \"id\": \"2\",\n" +
" \"name\": \"some other name\",\n" +
" \"url\": \"some other url\",\n" +
" \"active\": true\n" +
" }\n" +
"]";
ObjectMapper mapper = new ObjectMapper();
try {
List<Provider> providerList = mapper.readValue(json, new TypeReference<List<Provider>>(){});
for (Provider provider : providerList) {
System.out.println(provider);
}
ProviderList list = new ProviderList();
list.setProviderList(providerList);
} catch (IOException e) {
e.printStackTrace();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.