У меня есть собственный десериализатор для моего класса, как показано ниже:
private class HolderDeserializer implements JsonDeserializer<Holder> {
@Override
public Holder deserialize(JsonElement json, Type type, JsonDeserializationContext context)
throws JsonParseException {
Type mapType = new TypeToken<Map<String, String>>() {}.getType();
// in the below data map, I want value to be stored in lowercase
// how can I do that?
Map<String, String> data = context.deserialize(json, mapType);
return new Holder(data);
}
}
И вот как я регистрирую свой десериализатор при создании объекта Gson:
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Holder.class, new HolderDeserializer());
Gson gson = gsonBuilder.create();
И, наконец, разбор моего JSON вот так:
Type responseType = new TypeToken<Map<String, Holder>>() {}.getType();
Map<String, Holder> response = gson.fromJson(jsonLine, responseType);
В моем методе deserialize
значение json
поступает так же, как этот {"linkedTo":"COUNT"}
, а затем загружается в карту данных как {linkedTo=COUNT}
. Я хотел посмотреть, есть ли способ, которым все значение карты data
может быть строчным, поэтому вместо этого {linkedTo=COUNT}
он должен автоматически сохраняться таким образом {linkedTo=COUNT}
в карте данных?
Есть ли способ сделать это в Gson автоматически?
Update:
Ниже мой контент JSON:
{
"abc": {
"linkedTo": "COUNT",
// possibly more data...
},
"plmtq": {
"linkedTo": "TITLE",
"decode": "TRUE",
// possibly more data...
}
}