Джексон - строка Json для Java Список классов - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь сопоставить строку JSON с классом Java с помощью Джексона.

public class ChartData {
    List<String> xAxis=new ArrayList<String>();
    List<String> yAxis=new ArrayList<String>();
    List<String> zAxis=new ArrayList<String>();
    String type;

    public ChartData() {

    }

    public ChartData(String type, List<String> yAxis, List<String> zAxis) {
        this.type = type;
        this.yAxis = yAxis;
        this.zAxis = zAxis;

    }

Код, который я пробовал:

List<ChartData> emp = new ArrayList<>();
String o2 ="[{\"type\": \"2\", \"yAxis\": [\"11\"], \"zAxis\": [\"8\"]}, {\"type\": \"3\", 
             \"yAxis\": [\"17\", \"13\", \"12\"], \"zAxis\": [\"14\", \"13\", \"12\"]}]";
ObjectMapper mapper = new ObjectMapper();
data= (List<ChartData>) mapper.readValue(o2, ChartData.class);

return data;

Но я получаю следующую ошибку:

Невозможно десериализовать экземпляр com.ChartData из токена START_ARRAY в [Source: [{"type": "2", "yAxis": ["11"], "zAxis": ["8"]}, {"type": "3", "yAxis": ["17", "13", "12"], "zAxis": ["14", "13", "12"]}];строка: 1, столбец: 1]

Где моя ошибка?

1 Ответ

0 голосов
/ 06 декабря 2018

Существует особый способ десериализации в список в Джексоне:

List<ChartData> data = mapper.readValue(o2 , new TypeReference<List<ChartData>>(){});

В вашем коде также есть несовпадение типов при преобразовании.Вы используете mapper.readValue(o2, ChartData.class), но преобразуете его в List<ChartData>.

Чтобы обеспечить базовое преобразование типов (без TypeReference), вы можете десериализовать json в массив следующим образом:

ChartData[] data = mapper.readValue(o2 , ChartData[].class);

, а затем преобразовать его в список, если вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...