Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

256
Vistas
Analizar JSON con un objeto de clave dinámica dentro de un objeto de clave dinámica con Gson

Soy un novato en Android y tengo un archivo JSON con una clave dinámica como esta:

 { "x": { "a": { "1": [1,2,3,4], "2": [1,2,3,4] }, "b": { "1": [1,2,3,4], "2": [1,2,3,4] } }, "y": { "a": { "1": [1,2,3,4], "2": [1,2,3,4] }, "b": { "1": [1,2,3,4], "2": [1,2,3,4] } }, "z": { "a": { "1": [1,2,3,4], "2": [1,2,3,4] }, "b": { "1": [1,2,3,4], "2": [1,2,3,4] } } }

Lo analicé con éxito por JSONObject pero tengo que recorrer las teclas Iterator en x, y, z. Para cada vez, tengo que hacer un bucle en a, b y lo mismo para "1" y "2". Creo que no es una buena solución. Creé modelos para ellos así:

 Class XYZ { private String name; // "x", "y", "z" value private ArrayList<ABC> abcList; } Class ABC { private String name; // "a", "b", "c" private ArrayList<Item> itemList; } Class Item{ private String ID; // "1", "2" private int[] valueArray; }

¿Alguien puede ayudarme a analizar este json de Gson? Creo que se ve más profesional: D. Muchas gracias

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Sus modelos no pueden mapear su JSON solo porque la configuración predeterminada de Gson claramente los hace incomparables.

Puede tener dos formas "predeterminadas":

estático

... ya que realmente no mencionaste por qué tu JSON se considera dinámico:

 final class XYZ { final ABC x = null; final ABC y = null; final ABC z = null; }
 final class ABC { final OneTwo a = null; final OneTwo b = null; }
 final class OneTwo { @SerializedName("1") final List<Integer> one = null; @SerializedName("2") final List<Integer> two = null; }

Ejemplo:

 try ( final Reader reader = getPackageResourceReader(Q43695739.class, "dynamic.json") ) { final XYZ xyz = gson.fromJson(reader, XYZ.class); System.out.println(xyz.xbtwo); }

dinámico (por deserialización)

... asumiendo que sus claves son dinámicas, pero la estructura sigue siendo la misma:

 private static final Type stringToStringToStringToIntegerListType = new TypeToken<Map<String, Map<String, Map<String, List<Integer>>>>>() { }.getType();
 try ( final Reader reader = getPackageResourceReader(Q43695739.class, "dynamic.json") ) { final Map<String, Map<String, Map<String, List<Integer>>>> m = gson.fromJson(reader, stringToStringToStringToIntegerListType); System.out.println(m.get("x").get("b").get("2")); }

dinámico (por árboles JSON)

Otro verdadero enfoque dinámico que puede ser útil para algunos escenarios. También tenga en cuenta que JSONObject no está en el reino de Gson: probablemente haya importado este del paquete org.json . Gson usa nombres en mayúsculas y minúsculas como JsonElement , JsonObject , etc.

 try ( final Reader reader = getPackageResourceReader(Q43695739.class, "dynamic.json") ) { final JsonElement jsonElement = gson.fromJson(reader, JsonElement.class) .getAsJsonObject() .getAsJsonObject("x") .getAsJsonObject("b") .getAsJsonArray("2"); System.out.println(jsonElement); }

El primer y el segundo ejemplo producen instancias java.util.List

[1, 2, 3, 4]

El tercer ejemplo devuelve una instancia de JsonArray con una implementación toString ligeramente diferente:

[1,2,3,4]

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda