У меня удаленный API, отвечающий json, структурированный так:
{
"something": 1234,
"message": "abcde",
"someKey": null,
"Results": [
{
"key1": "",
"key2": "some value here",
"key3": ""
}
]
}
Проблема в том, что возвращаются сотни этих пустых строковых значений, что затрудняет сортировку результатов. , Я пытался зарегистрировать и реализовать свой собственный JsonDeserializer, например:
public static class EmptyStringAsNullTypeAdapter<T> implements JsonSerializer<T>, JsonDeserializer<T> {
@Override
public JsonElement serialize(T src, Type typeOfSrc, JsonSerializationContext context) {
if(StringUtils.isBlank(src.toString())) return null;
return new JsonPrimitive(src.toString());
}
@Override
public T deserialize(final JsonElement jsonElement, Type type, final JsonDeserializationContext context) throws JsonParseException {
if ( jsonElement.isJsonPrimitive() ) {
final JsonPrimitive jsonPrimitive = jsonElement.getAsJsonPrimitive();
if ( jsonPrimitive.isString() && jsonPrimitive.getAsString().isEmpty() ) {
return null;
}
}
return context.deserialize(jsonElement, type);
}
}
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(JsonElement.class, new EmptyStringAsNullTypeAdapter());
// gsonBuilder.registerTypeAdapter(String.class, new EmptyStringAsNullTypeAdapter()); //tried this first
Gson gson = gsonBuilder.create();
JsonParser jp = new JsonParser();
JsonElement je = jp.parse(jsonString);
String prettyJson = gson.toJson(je);
Кажется, не имеет значения, что я здесь делаю, пользовательский десериализатор никогда не вызывается, а мой "симпатичный Json" всегда содержит пустые строки, которые я пытаюсь избежать. Я также попытался добавить пользовательский сериализатор, но он также никогда не вызывается. Может ли gson сделать то, что я хотел бы, и если да, то как?
Вот что я хочу:
{
"something": 1234,
"message": "abcde",
"Results": [
{
"key2": "some value here",
}
]
}