Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

255
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!