java - example - Cómo analizar una cadena JSON en una matriz con Jackson
objectmapper java (3)
Tengo una String
con el siguiente valor:
[{"key1":"value11", "key2":"value12"},{"key1":"value21", "key2":"value22"}]
Y la siguiente clase:
public class SomeClass {
private String key1;
private String key2;
/* ... getters and setters omitted ...*/
}
Y quiero analizarlo en una List<SomeClass>
o SomeClass[]
¿Cuál es la forma más sencilla de hacerlo utilizando Jackson ObjectMapper
?
El ejemplo completo con una matriz. Reemplace " constructArrayType () " por " constructCollectionType () " o cualquier otro tipo que necesite.
import java.io.IOException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.TypeFactory;
public class Sorting {
private String property;
private String direction;
public Sorting() {
}
public Sorting(String property, String direction) {
this.property = property;
this.direction = direction;
}
public String getProperty() {
return property;
}
public void setProperty(String property) {
this.property = property;
}
public String getDirection() {
return direction;
}
public void setDirection(String direction) {
this.direction = direction;
}
public static void main(String[] args) throws JsonParseException, IOException {
final String json = "[{/"property/":/"title1/", /"direction/":/"ASC/"}, {/"property/":/"title2/", /"direction/":/"DESC/"}]";
ObjectMapper mapper = new ObjectMapper();
Sorting[] sortings = mapper.readValue(json, TypeFactory.defaultInstance().constructArrayType(Sorting.class));
System.out.println(sortings);
}
}
Finalmente lo tengo:
ObjectMapper objectMapper = new ObjectMapper();
TypeFactory typeFactory = objectMapper.getTypeFactory();
List<SomeClass> someClassList = objectMapper.readValue(jsonString, typeFactory.constructCollectionType(List.class, SomeClass.class));
La otra respuesta es correcta, pero para completar, aquí hay otras formas:
List<SomeClass> list = mapper.readValue(jsonString, new TypeReference<List<SomeClass>>() { });
SomeClass[] array = mapper.readValue(jsonString, SomeClass[].class);