2013-09-30 3 views
2

У меня есть класс POJODeserialize внутренний JSON объект

Class Pojo { 
String id; 
String name; 
//getter and setter 
} 

У меня есть JSON, как

{ 
    "response" : [ 
     { 
      "id" : "1a", 
      "name" : "foo" 
     }, 
     { 
      "id" : "1b", 
      "name" : "bar" 
     } 
    ] 
} 

Я использую Jackson ObjectMapper для десериализации. Как я могу получить List<Pojo> без создания каких-либо других родительских классов?

Если невозможно, возможно ли получить объект Pojo, который содержит только первый элемент строки json i.e в этом случае id="1a" и name="foo"?

+0

Кажется похожи [этот пост о десериализации массива.] (http://stackoverflow.com/questions/6349421/how-to-use-jackson-to-deserialise-an-arra y-of-objects) – Admit

+0

Могу ли я спросить вас, почему вы удалили принятый ответ? – Enrichman

ответ

2

Вам сначала нужно получить массив

String jsonStr = "{\"response\" : [ { \"id\" : \"1a\", \"name\" : \"foo\"},{ \"id\" : \"1b\",\"name\" : \"bar\" } ]}"; 
ObjectMapper mapper = new ObjectMapper(); 
JsonNode node = mapper.readTree(jsonStr); 
ArrayNode arrayNode = (ArrayNode) node.get("response"); 
System.out.println(arrayNode); 
List<Pojo> pojos = mapper.readValue(arrayNode.toString(), new TypeReference<List<Pojo>>() {}); 

System.out.println(pojos); 

отпечатки (с toString())

[{"id":"1a","name":"foo"},{"id":"1b","name":"bar"}] // the json array 
[id = 1a, name = foo, id = 1b, name = bar] // the list contents 
1

Вы можете использовать общий readTree с JsonNode:

ObjectMapper mapper = new ObjectMapper(); 
JsonNode root = mapper.readTree(json); 
JsonNode response = root.get("response"); 
List<Pojo> list = mapper.readValue(response, new TypeReference<List<Pojo>>() {}); 
Смежные вопросы