Как я могу сериализовать этот 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 «fields» представляет собой хэш-карту, а не список.
Мой вопрос: есть ли какая-либо «волшебная» аннотация, которая может заставить Джексона распознавать ключи карты как имена свойств pojo и назначать сопоставить значения со значениями свойств pojo?

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

private Map<String, String> fields;

... потому что в моем реальном json у меня есть сложные объекты в значениях карты, а не только строки...

Спасибо ;-)

Филипп


person Philippe    schedule 10.12.2010    source источник
comment
Кроме того, когда я пытаюсь сериализовать эти карты, я получаю: Ошибка ввода-вывода: невозможно десериализовать экземпляр java.lang.String из токена START_OBJECT   -  person Philippe    schedule 10.12.2010


Ответы (1)


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

public class MyPojo {
  public Fields fields;
}

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

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

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

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

потому что списки сопоставляются с массивами JSON.

person StaxMan    schedule 10.12.2010