Cómo convertir JSON de campos con valores en Arrays en una lista tipada de una clase personalizada.
Estoy tratando de deserializar json en mi clase usando la biblioteca “jackson-databind” de Java. El json tiene el siguiente formato:
sample.json
{
...,
"random" : {
"field1" : ["x1","y1","z1","a1","b1"],
"field2" : ["x2","y2","z2","a2","b2"],
"field3" : ["x3","y3","z3","a3","b3"]
}
}
Quiero leer este json en una lista de tipo List<myclass>
llamada myList
, con tamaño 5 [xMy,yMy,zMy,aMy,bMy]
. La clase MyClass
tiene los atributos: String field1
, String field2
, String field3
. El elemento xMy debe tener una lista de [x1, x2, x3]. yMy debe tener una lista de [y1, y2, y3]. zMy debe tener una lista de [z1, z2, z3].
public class MyClass {
private String field1;
private String field2;
private String field3;
...
}
Por lo tanto, la variable de resultado será List<myclass> myList
.
Código UltraSmartLogic.java
JsonNode node = new ObjectMapper().readTree(json);
JsonNode randomNode = node.get("random");
ObjectReader reader = new ObjectMapper().readerFor(new TypeReference<><string>>() {});
List<string> field1ValueList = reader.readValue(randomNode.get("field1"));
List<myclass> myList = ???
Este es solo un json simplificado, el json real contiene 7 campos y 1000 valores para cada campo. El objetivo aquí es crear 1000 instancias de MyClass
dentro de myList
. El primer elemento debe estar mapeado con x1, x2, x3, el segundo elemento debe estar mapeado con y1, y2, y3, el tercero con z1, z2, z3, y así sucesivamente mil veces…
field1ValueList
no se usa, porque de esta manera tendría 7 variables de tipo List
y 7 bucles for
iterando 1000 veces cada uno, más otro bucle para asignar valores a List<myclass> myList
. Creo que jackson es más efectivo y capaz de deserializar esto, solo que no sé cómo. Por ahora.
davy.ai
Para lograr el resultado deseado, puedes usar
JsonNode
de Jackson para navegar el árbol JSON y extraer los valores para cada instancia deMyClass
. Aquí tienes un ejemplo de fragmento de código que debería ayudarte:Este código inicializa una lista
myList
vacía y luego itera sobre los 1000 valores de cada campo en el JSON. Para cada iteración, crea una nueva instancia deMyClass
y luego itera sobre los tres campos, extrayendo el valor correspondiente del nodo JSON y configurándolo en el campo apropiado de la instancia deMyClass
. Finalmente, se agrega la instancia deMyClass
amyList
.Nota que esto asume que el JSON está bien formado y que no faltan ni hay campos/valores inesperados. Es posible que necesites agregar un manejo de errores si el JSON puede variar en su estructura.