2014-09-15 5 views
0

У меня есть класс User:JSON список объектов POJO

public class User{ 
    private String name; 
    private Integer age; 

    public String getName(){return name;} 
    public void setName(String name){this.name = name;} 

    public Integer getAge(){return age;} 
    public void setAge(Integer age){this.age = age;} 
} 

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

Я получил насколько это:

String json = "[{"name":"bill","age":12},{"name":"bob","age":20}]; 
ObjectMapper mapper = new ObjectMapper(); 
ArrayList<User> userList = mapper.readValue(json, User.class); 

проблема, конечно, в том, что картограф хочет отобразить непосредственно пользователю объекта не список пользовательских объектов. Я чувствую, что здесь есть что-то простое, пропавшее без вести ... что это такое ??

+0

Так что вместо сопоставления с 'User', почему бы вам не перейти на' ArrayList '? –

ответ

1
List<User> list2 = mapper.readValue(jsonString, 
TypeFactory.collectionType(List.class, User.class)); 


Если мы хотим создать конкретные экземпляры JavaType затем Jackon обеспечивает TypeFactory (примечание для версии> = 1.8 использования должны быть сделано с помощью ObjectMapper, более подробной информации here). TypeFactory класс предоставляет различные вспомогательные методы, такие как MapType, collectionType и т.д.

+0

некоторые объяснения определенно улучшат ответ! –

+1

Я обновил, надеюсь, теперь это ясно. – sol4me

+0

Это тот, с которым я пошел, и делаю то, что хочу. В качестве последующего вопроса, если у вас был json, как я выше, и пользовательский объект ech также имеет атрибут List

, как этот фактор в этом решении – Deslyxia

1

Попробуйте этот путь

Gson gson = new Gson(); 
User[] navigationArray = gson.fromJson(json, User[].class); 
System.out.println(Arrays.toString(navigationArray)); 

Или так

Type collectionType = new TypeToken<List<User>>() {}.getType(); 
List<User> userList = gson.fromJson(json, collectionType); 
System.out.println(userList); 
1

Как вы используете Jackson ObjectMapper, вы можете иметь:

String json = "[{\"name\":\"bill\",\"age\":12},{\"name\":\"bob\",\"age\":20}]"; 
       ObjectMapper mapper = new ObjectMapper(); 
       @SuppressWarnings("unchecked") 
       ArrayList<User> userList = mapper.readValue(json,ArrayList.class); 
       System.out.println(userList); 

отпечатки:

[{name=bill, age=12}, {name=bob, age=20}] 
Смежные вопросы