Как распарсить json в джаве?

Есть json следующего вида:

{
  "links": ["example","example"...],

  "abbr": {"short": "long_variant", "short": "long_variant"...}
}

Как его распарсить с помощью jackson?

class MyJson {
  String[] links;
  Map<String, String> abbr;
}

....

MyJson hdata = mapper.readTree(file, MyJson.class);

Пробовал так, но это просто выдает ошибку.


Ответы (1 шт):

Автор решения: Nowhere Man

Метод ObjectMapper::readTree принимает только один входной параметр и возвращает экземпляр класса JsonNode.

Для получения объекта из файла следует использовать метод ObjectMapper::readValue.
Кроме того, у класса MyJson должны быть определены геттеры/сеттеры (вручную либо при помощи Lombok-аннотаций @Data или @Getter/@Setter).

То есть, изменённый код должен выглядеть как-то так:

public class MyJson {
    String[] links;
    Map<String, String> abbr;

    public String[] getLinks() {return links;}
    public Map<String, String> getAbbr() {return abbr;}

    public void setLinks(String[] links) { this.links = links;}
    public void setAbbr(Map<String, String> abbr) { this.abbr = abbr;}
}
public static void main(String ... args) throws IOException {
    ObjectMapper mapper = new ObjectMapper();
    File file = new File("my.json");
    MyJson obj = mapper.readValue(file, MyJson.class);
    // ...
}

Также следует учесть, что ключи в мапе должны быть уникальными для корректной десериализации, как отметил в комментарии @insolor.

→ Ссылка