Как использовать Джексона для десериализации массивов объектов из объекта json - PullRequest
0 голосов
/ 01 сентября 2018

Я пытаюсь десериализовать следующий JSON с использованием библиотеки Джексона. Этот JSON очень похож на упомянутый в этот вопрос . Мой вопрос: Как десериализовать следующий JSON?

{
  "A": [
    {
      "id": 16,
      "logo": "QJQSZzbXurElfHYcq6hcbPuaWKVfQU31lx2eSIIr.png",
    },
    {
      "id": 20,
      "logo": "AizaZzbXurElfHYcq6PuaWKV2761lx2eSLESASFr.png",
    }
  ],
  "B": [
    {
      "id": 42,
      "logo": "tBYhHGTNTCYT60RZJydMyGgg47Tla36ISuRj4p0e.png",
    },
    {
      "id": 44,
      "logo": "kCZveUWo9eqIZc25deE4ln8llxlbBviRolk4PsCm.png",
    }
  ]
}

Вот MonthTree класс:

public class MonthTree {
    private int id;
    private String logo;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }

    public String getLogo() {
        return logo;
    }
    public void setLogo(String logo) {
        this.logo = logo;
    }
}

Однако я попытался получить список / массив имен массивов (свойства A и B), id и logo, но мне это не удалось. Вот что я пытался сделать вообще:

ObjectMapper mapper = new ObjectMapper();
List<MonthTree> monthTrees = mapper.readValue(json_res, new TypeReference<List<MonthTree>>(){});

Итак, я получил следующее исключение:

Невозможно десериализовать экземпляр com.talmir.myApp.utils.MonthTree[] из токена START_OBJECT

p.s. Я новичок в этой библиотеке, поэтому не знаю, какие еще функции есть в этой библиотеке.

1 Ответ

0 голосов
/ 01 сентября 2018

Вы можете сделать так:

public class MonthTree {

    private int id;
    private String logo;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }

    public String getLogo() {
        return logo;
    }
    public void setLogo(String logo) {
        this.logo = logo;
    }
    @Override
    public String toString() {
        return "MonthTree [id=" + id + ", logo=" + logo + "]";
    }

    public static void main(String[] args) {
        String json = "{\n" + 
                "  \"A\": [\n" + 
                "    {\n" + 
                "      \"id\": 16,\n" + 
                "      \"logo\": \"QJQSZzbXurElfHYcq6hcbPuaWKVfQU31lx2eSIIr.png\"\n" + 
                "    },\n" + 
                "    {\n" + 
                "      \"id\": 20,\n" + 
                "      \"logo\": \"AizaZzbXurElfHYcq6PuaWKV2761lx2eSLESASFr.png\"\n" + 
                "    }\n" + 
                "  ],\n" + 
                "  \"B\": [\n" + 
                "    {\n" + 
                "      \"id\": 42,\n" + 
                "      \"logo\": \"tBYhHGTNTCYT60RZJydMyGgg47Tla36ISuRj4p0e.png\"\n" + 
                "    },\n" + 
                "    {\n" + 
                "      \"id\": 44,\n" + 
                "      \"logo\": \"kCZveUWo9eqIZc25deE4ln8llxlbBviRolk4PsCm.png\"\n" + 
                "    }\n" + 
                "  ]\n" + 
                "}";

        try {
            ObjectMapper mapper = new ObjectMapper();
            Map<String, List<MonthTree>> map = mapper.readValue(json, new TypeReference<Map<String, List<MonthTree>>>(){});
            Iterator<String> it = map.keySet().iterator();
            while (it.hasNext()) {
                String letter = (String) it.next();
                List<MonthTree> list = map.get(letter);
                for (MonthTree monthTree : list) {
                    System.out.println("Letter: "+letter+" MonthTree: "+monthTree);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

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