我有一些 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 } } ]}我對(duì)“foo”和“foo2”不感興趣,只想反序列化“菜肴”。為此,我創(chuàng)建了兩個(gè)類: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);但是,如果我運(yùn)行它,我會(huì)得到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]如何使用嵌套數(shù)組反序列化嵌套 Json 而不必映射我不感興趣的字段?
2 回答

SMILET
TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
您應(yīng)該映射details為 POJO 而不是List<Details>
public class Dish {
@JsonProperty("name")
private String name;
@JsonProperty("details")
private Detail details;
}

撒科打諢
TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊
你可以試試這個(gè):
JavaType javaType = mapper.getTypeFactory().constructParametricType(List.class, Dish.class); List<Dish> dishes = mapper.readValue("jsonString", javaType);
添加回答
舉報(bào)
0/150
提交
取消