десериализация массива картографирования объектов - PullRequest
11 голосов
/ 17 февраля 2011

Мне нужна помощь в разборе ответа с помощью картографа Джексона на POJO. у меня есть это в ответ:

 "data": [{
        "item": {
            "downloaded": false,
            "moderated": false,
            "add": false
        }
    },
    {
        "item": {
            "downloaded": false,
            "moderated": false,
            "add": false }
// more

так как мне связать это с картографом для POJO? Вот мой класс, который я пытаюсь, но он возвращает, что «элемент» не распознается и не может быть проигнорировано.

public ArrayList<Item> data =  new ArrayList<Item>();

где item - открытый статический класс Item с конструкторами и все поля выше с геттерами и сеттерами.

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

Ответы [ 3 ]

12 голосов
/ 16 октября 2011
JsonNode jsonNode = mapper.readValue(s, JsonNode.class); 
JsonNode userCards = jsonNode.path("data");
List<Item> list = mapper.readValue(userCards.toString(), new TypeReference<List<Item>>(){});
8 голосов
/ 18 февраля 2011

В вашем примере отсутствует пара частей (особенно определение Item), чтобы узнать, совместима ли ваша структура;но в целом структуры JSON и Object должны совпадать.Таким образом, вам, по крайней мере, понадобится что-то вроде:

public class DataWrapper {
  public List<Item> data; // or if you prefer, setters+getters
}

, и если это так, вы будете связываться с:

DataWrapper wrapper = mapper.readValue(json, DataWrapper.class);

и получать доступ к данным как

List<Item> items = wrapper.data;
2 голосов
/ 23 марта 2012

Вот мой вариант кода мазиара.

List<Item> list = mapper.readValue( s, new TypeReference<List<Item>>(){} );

Он просто исключает сначала преобразование в JsonNode и вместо этого непосредственно преобразует в Список; по-прежнему работает нормально, выводит список предметов.

...