Tengo un mapa que contiene una mezcla de tipos como en este ejemplo sencillodeserializar Mapa <Object, Object> con GSON
final Map<String, Object> map = new LinkedHashMap<String, Object>();
map.put("a", 1);
map.put("b", "a");
map.put("c", 2);
final Gson gson = new Gson();
final String string = gson.toJson(map);
final Type type = new TypeToken<LinkedHashMap<String, Object>>(){}.getType();
final Map<Object, Object> map2 = gson.fromJson(string, type);
for (final Entry<Object, Object> entry : map2.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
Lo que vuelva son claras Object
s, no hay Integer
s, no hay String
s. La salida se ve como
a : [email protected]
b : [email protected]
c : [email protected]
¿Puedo arreglarlo de alguna manera? Esperaría que casos tan simples se manejen correctamente de manera predeterminada.
Sé que la información sobre el tipo no siempre se puede conservar, y posiblemente 1
y "1"
significa exactamente lo mismo en JSON. Sin embargo, devolver objetos simples sin contenido simplemente no tiene sentido para mí.
Actualización: La versión serializada (es decir, el string
arriba) se ve bien:
{"a":1,"b":"a","c":2}
¿Podría ver lo que parece la 'cadena de cadena final'? Estoy seguro de que ayudaría a comprender el problema. –
Acabo de encontrar esto también ... Es por eso que uso mi JSONer ... podría ser un poco más lento, pero es mucho más genérico que Gson: http://nu-art-infrastructure.blogspot.co .il/2013/03/jsoner.html – TacB0sS
@ TacB0sS: en su lugar, he seguido el consejo de "estructura de datos estática y clara". Sin embargo, hacer que Gson maneje esto debería ser bastante trivial. ¿Te importa archivar un problema? – maaartinus