En resumen, este es un esquema del objeto JSON quiero analizar en JAVA:¿Cómo uso la API Gson de Google para deserializar JSON correctamente?
{
object1: {
item1: //[String | Array | Object] ,
item2: // ...
//<> more items
object2: { /* .. */ }
//<> more objects
}
Estos son los POJO s he creado para el análisis (Voy a dejar de lado el import
declaraciones para abreviar):
(1) la representación del objeto completo JSON
public class JObjectContainer {
private List<JObject> jObjects ;
public JObjectContainer() { }
//get & set methods
}
(2) la representación de los objetos anidados:
public class JObject {
private String id ;
private List<JNode> jObjects ;
public JObject() { }
//get & set methods
}
(3) La representación de los artículos:
public class JNode {
private JsonElement item1 ;
private JsonElement item2 ;
//<> more item fields
public JNode() { }
//get & set methods
}
Ahora, la creación de una instancia Gson (FileReader
para importar el jsonFile
),
Gson gson = new Gson() ;
JObjectContainer joc = gson.fromJson(jsonFile,JObjectContainer.class) ;
me siento un NullPointerException
cada vez que intento para acceder al objeto analizable (p. ej. a través de ListIterator
). Gson hace sin embargo crea un objeto de la clase I especificada y no arroja ningún error posterior.
Sé que esto se ha hecho antes. Entonces, ¿qué me estoy perdiendo?
TIA
Hola, gracias por tu respuesta! Tenía la intención de mantener las cadenas de identificador (por ejemplo, 'Object1'), para poder analizar correctamente la clase Container para su contenido, al igual que lo haría en JavaScript. ¿Sabes cómo hacerlo? – FK82
Si esas cadenas de identificador están vinculadas a cada elemento ('Node'), no al contenedor (' nodes'), entonces necesita convertirlo en una propiedad del 'Node'. Los objetos JS con una cantidad desconocida de propiedades y nombres de propiedad desconocidos simplemente no son una buena idea/práctica. Debe ponerlos en una matriz y darle un nombre fijo a la matriz. – BalusC
Eso supera el propósito de usar JSON por completo. Si no puedo reflejar el estilo de mapeo de objetos de JSON en JAVA, también podría escribir mi propia API. ;-) Básicamente estoy tratando de hacer lo mismo que en este example while somehow retaining the identifier strings. – FK82