2011-08-30 11 views
73

Tengo un String con el siguiente valor:Cómo analizar una cadena JSON para una matriz mediante Jackson

[{"key1":"value11", "key2":"value12"},{"key1":"value21", "key2":"value22"}] 

Y la clase siguiente:

public class SomeClass { 
    private String key1; 
    private String key2; 
    /* ... getters and setters omitted ...*/ 
} 

Y quiero analizarlo a una List<SomeClass> o a SomeClass[]

¿Cuál es la forma más sencilla de hacerlo utilizando JacksonObjectMapper?

+0

Tuve una situación similar, pero decidí quitar la serialización al objeto JSONArray en lugar de hacerlo a una clase, ya que evitaría problemas de serialización de clases en el futuro. ¿Hay alguna ventaja sobre mirar? – Arun

Respuesta

118

finalmente lo tengo:

ObjectMapper objectMapper = new ObjectMapper(); 
TypeFactory typeFactory = objectMapper.getTypeFactory(); 
List<SomeClass> someClassList = objectMapper.readValue(jsonString, typeFactory.constructCollectionType(List.class, SomeClass.class)); 
+30

Obtenga typeFactory como 'ObjectMapper objectMapper = new ObjectMapper();' 'objectMapper.getTypeFactory();' – manish

+1

¿Qué es ObjectMapper? ¿Puedes por favor especificar? – hitesh141

+0

@ hitesh141 ObjectMapper es miembro de com.fasterxml.jackson.databind.ObjectMapper – Chu

68

La otra respuesta es correcta, pero está completo, aquí hay otras maneras:

List<SomeClass> list = mapper.readValue(jsonString, new TypeReference<List<SomeClass>>() { }); 
SomeClass[] array = mapper.readValue(jsonString, SomeClass[].class); 
3

El ejemplo completo con una matriz. Reemplace "construcArrayType()" por "construcCollectionType()" o cualquier otro tipo que necesite.

Cuestiones relacionadas