[英]Deserialize nested Json Arrays
我有一些Json,看起来像:
{
"foo": [
{
"bar": "baz"
}
],
"foo2": [
{
"bar": "baz"
}
],
"dishes": [
{
"name": "tonno",
"details": {
"toppings": [
"cheese",
"tomato",
"tuna"
],
"price": 10
}
},
{
"name": "cheese",
"details": {
"toppings": [
"cheese",
"tomato"
],
"price": 5
}
},
{
"name": "mexicana",
"details": {
"toppings": [
"cheese",
"tomato",
"chicken"
],
"price": 12,
"inOffer": true
}
}
]
}
我对“ foo”和“ foo2”不感兴趣,但只想反序列化“ dishes”。 为此,我创建了两个类:
public class Dish {
@JsonProperty("name")
private String name;
@JsonProperty("details")
private List<Detail> details;
}
和
public class Detail {
@JsonProperty("toppings")
private List<String> toppings;
@JsonProperty("price")
private int price;
@JsonProperty("inOffer")
private boolean inOffer;
}
我找到了这种方法,并尝试了以下方法:
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
final JsonNode response = mapper.readTree(json).path("dishes");
final CollectionType collectionType = TypeFactory.defaultInstance().constructCollectionType(List.class, Dish.class);
List<Dish> dishes = mapper.readerFor(collectionType).readValue(response);
但是,如果运行此命令,我将得到
m.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.ArrayList` out of START_OBJECT token at [Source: UNKNOWN; line: -1, column: -1]
如何在不映射我不感兴趣的字段的情况下使用嵌套数组反序列化嵌套Json?
您应该将details
映射为POJO而不是List<Details>
public class Dish {
@JsonProperty("name")
private String name;
@JsonProperty("details")
private Detail details;
}
您可以尝试以下方法:
JavaType javaType = mapper.getTypeFactory().constructParametricType(List.class, Dish.class);
List<Dish> dishes = mapper.readValue("jsonString", javaType);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.