Я хочу десериализовать объект JSON (используя GSON, потому что я уже использую его для поиска объектов) в общую карту типа Map<String, Object>
. Он должен создавать объекты типов, которые соответствуют соответствующим типам JSON, то есть этот объект JSON
{
"docID" : "a12345",
"relation" : ["1", "2", "3"],
"title" : { "de" : "German Title",
"en" : "English Title"}
}
следует десериализовать в Map<String, Object>
с записями следующих типов:
(String
, String
), (String
, List<String>
), (String
, Map<String, String>
) .
Я пытался использовать следующий код:
class Dictionary_ extends HashMap<String, Object> {
// nothing to do
};
private static final GsonBuilder GSON_BUILDER = new GsonBuilder();
public Map<String, Object> deserializeJsonString(String jsonString) {
Dictionary_ d = new Dictionary();
return GSON_BUILDER.create().fromJson(jsonString, d.getClass());
}
Но тогда получающиеся типы созданных Объектов будут следующими:
(String
, Object
), (String
, Object
), (String
, Object
)
и я не могу привести эти объекты к соответствующим «реальным» типам, потому что я получаю исключения приведения класса.
Я не могу использовать POJO, поскольку данные, которые я получаю, не имеют предопределенной структуры с точки зрения членов класса.
Итак, как я могу десериализовать такие общие данные в соответствии с общими типами Java?
Обновление:
Я просто попытался реализовать это с помощью JSON Simple, и он очень легко работает из коробки с помощью следующего кода:
Object ret = JSONValue.parse(jsonString);
return (List<Map<String, Object>>) ret;
Почему с GSON не все так просто ???