Как я могу сериализовать этот JSON, используя аннотации Джексона? - PullRequest
6 голосов
/ 10 декабря 2010

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

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

private Map<String, String> fields;

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

Спасибо; -)

Philippe

1 Ответ

12 голосов
/ 10 декабря 2010

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

public class MyPojo {
  public Fields fields;
}

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

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

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

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

потому что списки отображаются в массивы JSON.

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