Десериализация сложного файла json в POJO - работает как один элемент списка или не работает - PullRequest
1 голос
/ 31 марта 2019

Я пытаюсь десериализовать этот json в класс POJO, так что тогда я смогу управлять объектами.JSON:

{
 "something": "x",
 "items": [
  {
   "type": "y",
   "id": "123",
   "otherInfo": {
    "tag": "abc",
    "otherId": [
     {
      "first": "qaz",
      "second": "zaq"
     },
     {
[...]

Более 10 таких элементов.Я хотел десериализовать его, поэтому я использовал jsonschema2pojo, создал классы, такие как Item и otherInfo, с геттерами, сеттерами и конструкторами.

Затем я создал ObjectMapper в своем классе DAO:

ObjectMapper mapper = new ObjectMapper();
    Item items;
    {
        try {
            items = mapper.readValue(new File("path/file.json"), Item.class);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public Item getAllItems(){
       return items;
    }

ThisКстати, я получаю пустой вывод.При изменении Item на Item [] я получаю «MismatchedInputException» из-за «чего-то», которое выше «items» в моем JSON.

Когда я пытался ссылаться на класс POJO, это один уровеньвыше элемента, у меня есть весь JSON как один элемент массива со всем внутри него.Это очевидно, но это показывает, что ObjectMapper работает правильно.

Есть ли простой или эффективный способ десериализации JSON, подобный этому?

1 Ответ

0 голосов
/ 31 марта 2019

Вы можете создать родительский объект, который содержит ArrayList для представления массива Item.

Например:

public class MyParentObject {
    String something;
    ArrayList<Item> items;
    public ArrayList<Item> getItems() {
       return items;
    }
    // the rest of your getters/setters
}

// the object mapper line becomes:
MyParentObject parentObject = mapper.readValue(new File("path/file.json"), MyParentObject.class);

ArrayList<Item> items = parentObject.getItems();

При десериализации JSON массивы JSON могут быть напрямую сопоставлены с ArrayList.

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