gson可以在地图中将空字符串反序列化为null吗?

问题描述 投票:1回答:1

我有一个远程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可以做我想在这里做的事情吗,如果可以,怎么办?

java json gson json-deserialization
1个回答
0
投票

您需要实现JsonSerializer,在这里您再次以字符串形式序列化对象。

© www.soinside.com 2019 - 2024. All rights reserved.