Mam obiekt użytkownika z tej struktury:deserializacji mapie <String, Object> pole z Gson
class User {
private String id;
private String name;
private Map<String, Object> properties;
// GETTERS & SETTERS
}
Mam JSON String z tej struktury: Klucze
{
"user": {
"id:"123456789",
"name:"azerty",
"emailHash":"123456789", // not used in User class
"properties": {
"p1":1,
"p2":"test",
"p3":[1, 2, 3, 4],
"p4":{
etc...
}
}
}
}
właściwości są ciąg wartości właściwości może być ciągiem, int, szyk, boolean, mapa itp
próbuję deserializowania ten ciąg JSON z Gson tak:
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());
Nazwy pól "id" i "nazwa" są prawidłowo wprowadzane, ale pole "właściwości" pozostaje puste.
Czy wiesz, co robię źle? Z góry dziękujemy za pomoc!
Proponuję o właściwości jak 'JsonObject' a następnie przekształcenie JSON bezpośrednio do' Map '. –
Srinivas
Twój kod działa doskonale z jednym małym problemem: wydajesz się, że stworzyłeś 'GsonBuilder' o nazwie' builder', ale używasz jednego o nazwie 'gsonBuilder'. Jeśli to faktycznie kompiluje, to masz inny "GsonBuilder", który wcześniej utworzyłeś i używasz go przez pomyłkę. Poza tym ... deserializuje się dobrze na mojej maszynie. –
'gsonBuilder' jest błędem podczas pisania tematu. To 'builder', którego używam w moim kodzie. Będę edytować mój temat do korekty. Pole 'properties' jest poprawnie wstrzyknięte w twoim teście? To bardzo dziwne, że pozostaje dla mnie nieważne ... –