【发布时间】:2020-04-08 07:26:40
【问题描述】:
我有一个远程 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);
我在这里做什么似乎并不重要,自定义反序列化器永远不会被调用,我的“prettyJson”总是包含我试图避免的空字符串。我也尝试过添加自定义序列化程序,但它也永远不会被调用。 gson 可以在这里做我想做的事情吗?如果可以,怎么做?
这就是我想要的:
{
"something": 1234,
"message": "abcde",
"Results": [
{
"key2": "some value here",
}
]
}
【问题讨论】:
标签: java json gson json-deserialization