2010-12-10 2 views
6

У меня есть следующие JSON:Как я могу сериализовать этот JSON с помощью аннотаций Джексона?

{ 
    fields : { 
      "foo" : "foovalue", 
      "bar" : "barvalue" 
    } 
} 

Я написал POJO следующим образом:

public class MyPojo { 

    @JsonProperty("fields") 
    private List<Field> fields; 

    static class Field { 
     @JsonProperty("foo") private String foo; 
     @JsonProperty("bar") private String bar; 

     //Getters and setters for those 2 
} 

Это не удается, очевидно, потому что мой JSON поле "поле" является HashMap, а не список.
Мой вопрос: есть ли какая-либо «магическая» аннотация, которая может заставить Джексона распознавать ключи карты как имена свойств pojo и присваивать значениям карты значениям значений pojo?

PS: Я действительно не хочу, чтобы мои поля объекта как ...

private Map<String, String> fields; 

... потому что в моем реальном мире JSON У меня есть сложные объекты в ценности карты, а не только струна ...

Спасибо ;-)

Philippe

+0

Кроме того, когда я пытаюсь выполнить сериализацию этих карт, я получаю: ошибка ввода-вывода: не удается десериализовать экземпляр java.lang.String из токена START_OBJECT – Philippe 2010-12-10 15:43:16

ответ

12

Хорошо, для этого JSON, вы просто изменить ваш пример немного, как:

public class MyPojo { 
    public Fields fields; 
} 

public class Fields { 
    public String foo; 
    public String bar; 
} 

поскольку структура объектов должна согласовываться со структурой JSON. Конечно, вы можете использовать сеттеры и геттеры вместо открытых полей (и даже конструкторы вместо сеттеров или полей), это просто самый простой пример.

Ваш исходный класс будет производить/потреблять JSON больше как:

{ 
    "fields" : [ 
    { 
     "foo" : "foovalue", 
     "bar" : "barvalue" 
    } 
    ] 
} 

, потому что списки отображения для JSON массивов.

Смежные вопросы