El enfoque más sencillo que puedo pensar es simplemente tratar la estructura como Map
(de Map
).
Con Gson, esto es relativamente fácil de hacer, siempre que la estructura Map
sea estáticamente conocida, cada rama de la raíz tiene la misma profundidad, y todo es un String
.
import java.io.FileReader;
import java.lang.reflect.Type;
import java.util.Map;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class GsonFoo
{
public static void main(String[] args) throws Exception
{
Gson gson = new Gson();
Type mapType = new TypeToken<Map<String,Map<String, String>>>() {}.getType();
Map<String,Map<String, String>> map = gson.fromJson(new FileReader("input.json"), mapType);
System.out.println(map);
// Get the count...
int count = Integer.parseInt(map.get("0").get("count"));
// Get each numbered entry...
for (int i = 1; i <= count; i++)
{
System.out.println("Entry " + i + ":");
Map<String, String> numberedEntry = map.get(String.valueOf(i));
for (String key : numberedEntry.keySet())
System.out.printf("key=%s, value=%s\n", key, numberedEntry.get(key));
}
// Get the routes...
Map<String, String> routes = map.get("routes");
// Get each route...
System.out.println("Routes:");
for (String key : routes.keySet())
System.out.printf("key=%s, value=%s\n", key, routes.get(key));
}
}
Para más dinámico el manejo Map
estructura, que sugieren fuertemente el cambio a utilizar Jackson, en lugar de Gson, como Jackson deserializar un objeto JSON de cualquier complejidad arbitraria en un Java Map
, con sólo una sencilla línea de código, y retendrá automáticamente los tipos de valores primitivos.
import java.io.File;
import java.util.Map;
import org.codehaus.jackson.map.ObjectMapper;
public class JacksonFoo
{
public static void main(String[] args) throws Exception
{
ObjectMapper mapper = new ObjectMapper();
Map map = mapper.readValue(new File("input.json"), Map.class);
System.out.println(map);
}
}
Lo mismo se puede lograr con Gson, pero requiere docenas de líneas de código. (Además, Gson tiene otras deficiencias que hacen que valga la pena cambiar a Jackson.)
Me gustaría añadir que si su mapa no está anidado, las cosas son mucho más simples http://stackoverflow.com/questions/2779251/ cómo-puedo-convertir-json-a-un-mapa-de-usar-gson –