我有一个远程API,其响应的json结构如下:
{
"something": 1234,
"message": "abcde",
"Results": [
{
"key1": "",
"key2": "some value here",
"key3": ""
}
]
}
问题是,返回了数百个这些空字符串值,这使得很难对结果进行排序。我已经尝试过像这样注册和实现自己的JsonDeserializer:
public static class EmptyStringAsNullTypeAdapter<T> implements JsonDeserializer<T> {
// Let Gson instantiate it itself
private EmptyStringAsNullTypeAdapter() {}
@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());
Gson gson = gsonBuilder.create();
JsonParser jp = new JsonParser();
JsonElement je = jp.parse(jsonString);
String prettyJson = gson.toJson(je);
似乎无关紧要,自定义Deserializer永远不会被调用,而我的“ prettyJson”总是包含我要避免的空字符串。 gson可以做我想在这里做的事情吗,如果可以,怎么办?
您需要实现JsonSerializer
,在这里您再次以字符串形式序列化对象。