#java #arrays #json #jackson
#java #массивы #json #джексон
Вопрос:
У меня очень простой JSON:
{
"fruits": [
{
"id": 100,
"name": "Banana"
},
{
"id": 101,
"name": "Apple"
}
]
}
Я могу легко удалить этот JSON, используя ObjectMapper по умолчанию, который поставляется с Java, и два простых класса POJO, которые выглядят следующим образом:
public class FruitList {
private List<Fruit> fruits;
public List<Fruit> getFruits() {
return fruits;
}
public void setFruits(List<Fruit> fruits) {
this.fruits = fruits;
}
}
И отдельные элементы Fruit:
public class Fruit {
private String name;
private int id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
Это работает и вполне приемлемо. Однако я хотел бы знать, можно ли разархивировать этот JSON непосредственно в a List<Fruit>
— каким-то образом игнорируя объект контейнера, называемый fruits?
Я пытался использовать эту функцию, но она не сработала:
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
Также экспериментирую с:
List<Fruit> list = mapper.readValue(jsonString,
TypeFactory.defaultInstance().constructCollectionType(List.class, Fruit.class));
Не получилось.
Спасибо за любую помощь, приветствия
Комментарии:
1. List<Fruit> listCar = ObjectMapper.readValue(jsonString, new TypeReference<Список<Фрукты>>(){});
2. Это не работает. Выдает ошибку: невозможно десериализовать экземпляр java.util. ArrayList из токена START_OBJECT
3. О да, потому что ваш json — это не список, а объект, содержащий список в поле fruits . Если бы ваш сын был […], то то, что я предложил, сработало бы.
4. FruitList fruitList = ObjectMapper.readValue(json, FruitList.class ); Список<Фрукты> список = fruitList.getFruits(); Может быть, это?