2015-12-26 5 views
0

У меня есть JSON структурированы следующим образом:Что бы лучше со списком объектов POJO

{ 
    "bag" : { 
    "descrition" : "my bag 1", 
    "text" : 123456, 
    "item" : { 
     "-K5D9mi--s6jPWNwrNEu" : { 
     "name" : "name item", 
     "value" : 60 
     }, 
     "-K5R3ugcTVFnNlAEAHus" : { 
     "name" : "name item 2", 
     "value" : 55 
     }}} 
} 

Если бы я сделать мой POJO класс, как показано ниже:

public class Item { 
     String name; 
     int value; 
    } 
    public class Bag { 
     String descrition; 
     String text; 
     List<Item> item; 
    } 

Когда я десериализации объекта с кодом ниже дает ошибку, ссылаясь на список объектов «пункт»: «JsonMappingException: Невозможно десериализация экземпляра java.util.ArrayList из START_OBJECT лексемы»

Firebase ref = new Firebase("myAdressFirebase/bag/"); 
     ref.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       Bag bag = dataSnapshot.getValue(Bag.class); 
      } 
      @Override 
      public void onCancelled(FirebaseError firebaseError) { 
      } 
     }); 

Что было бы лучшим POJO для json до меня вернуть родительский объект Firebase и их детей за один звонок?

ответ

4

Вы не можете сериализовать структуру карты объектов/хешей в списке элементов. Ключам нет места, например "-K5D9mi--s6jPWNwrNEu" или "-K5R3ugcTVFnNlAEAHus" ;-).

Это было долгое время, так как я использовал Джексон, но я абсолютно уверен, что вы можете использовать Map<String, Item> как тип для item в вашем атрибута по классу Bag. т. е. я ожидаю, что Джексон предоставит конвертер из объекта JSON Object в интерфейс Java Map <> и наоборот.

+0

Peter! Спасибо! это просто то, что заменяет List для HashMap. Например: «HashMap Item» в классе Bag. Чтобы получить значения HashMap, выполните следующие действия: для (Map.Entry entry :.Back.getItem() entrySet()) { Элемент item = entry.getValue(); –

+0

Ahhhh извините, я забыл форматировать текст «Карта » как код. Я исправил это для моего ответа. Спасибо за ваш комментарий. –

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