Deserialización personalizada en un mapa usando Gson
Tengo el JSON a continuación:
{
"abc": {
"linkedTo": "count",
// possibly more data...
},
"plmtq": {
"linkedTo": "title",
"decode": "true",
// possibly more data...
}
}
Necesito cargar este JSON en unMap<String, Holder>
, con llaves"abc"
y"plmtq"
.
Abajo está miHolder
clase:
public class Holder {
private final Map<String, String> data;
public Holder(Map<String, String> data) {
this.data = data;
}
// More methods in this class...
}
El JSON no coincide con la estructura de mi clase., pero no puedo cambiar el JSON o las clases.
Lo que necesito es una forma de personalizar la deserialización para poder analizar el JSON en unMap<String, Holder>
.
¿Hay alguna forma de hacer esto?
A continuación se muestra el código que hace eso, pero parece demasiado complejo y debe haber una forma más sencilla de hacerlo ...
private static Map<String, Holder> getMap(String jsonLine)
{
Map<String, Holder> holder = new HashMap<>();
JsonElement jelement = new JsonParser().parse(jsonLine);
JsonObject jobject = jelement.getAsJsonObject();
for (Map.Entry<String, JsonElement> entry : jobject.entrySet())
{
Map<String, String> metadata = new HashMap<>();
JsonObject element = entry.getValue().getAsJsonObject();
for (Map.Entry<String, JsonElement> entry2 : element.entrySet())
{
metadata.put(entry2.getKey(), entry2.getValue().getAsString());
}
holder.put(entry.getKey(), new Holder(metadata));
}
return holder;
}