Есть ли способ разархивировать массив внутри объекта непосредственно в список с помощью Jackson

#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(); Может быть, это?