Как распарсить 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.