Ho un oggetto utente con questa struttura:deserializzazione un campo Map <String, Object> con GSON
class User {
private String id;
private String name;
private Map<String, Object> properties;
// GETTERS & SETTERS
}
ho una stringa JSON con questa struttura: chiavi
{
"user": {
"id:"123456789",
"name:"azerty",
"emailHash":"123456789", // not used in User class
"properties": {
"p1":1,
"p2":"test",
"p3":[1, 2, 3, 4],
"p4":{
etc...
}
}
}
}
proprieta sono String, i valori delle proprietà può essere una stringa, int, array, boolean, ecc Mappa
cerco di deserializzare questa stringa JSON con GSON così:
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(jsonString);
JsonObject object = element.getAsJsonObject();
GsonBuilder builder = new GsonBuilder();
builder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
Gson gson = builder.create();
User user = (User) gson.fromJson(object.get("user"), new TypeToken<User>() {}.getType());
I campi "id" e "nome" sono immessi correttamente ma il campo "proprietà" rimane nullo.
Sai cosa sto facendo male? Grazie in anticipo per il vostro aiuto!
vi suggerisco di avere proprietà come 'JsonObject' e poi convertire il JSON direttamente a' Map '. –
Srinivas
Il tuo codice funziona perfettamente con un piccolo problema: sembra che tu abbia creato un 'GsonBuilder' chiamato' builder', ma poi ne usi uno chiamato 'gsonBuilder'. Se questo è in realtà compilazione, hai un altro 'GsonBuilder' che hai creato in precedenza e lo stai usando per errore. A parte questo ... deserializza bene sulla mia macchina. –
'gsonBuilder' è un errore quando scrivo l'argomento. È 'builder' che uso nel mio codice. Modificherò il mio argomento per la correzione. Il campo 'properties' è correttamente iniettato nel tuo test? È molto strano rimanere per nulla per me ... –