当没有数据时,清空json对象而不是null - >如何用gson反序列化

时间:2013-09-11 20:44:18

标签: java json null deserialization gson

我正在尝试使用Google的gson库解析json数据。但是json数据表现不佳。

当一切正常时,看起来确实如此:

{
    "parent": {
        "child_one": "some String",
        "child_two": "4711",
        ...
    }
}

child_one应解析为Stringchild_twoint。 但有时其中一个孩子没有导致空对象而不是null的值,如下所示:

{
    "parent": {
        "child_one": "some String",
        "child_two": {},
        ...
    }
}

我没有权限改变json feed,因此我必须在反序列化期间处理它。 但我迷失在这里。如果我让解析第二个案例给我一个JsonSyntaxException

我考虑过使用自定义JsonDeserializer。如果它是JsonObject,那么检查每个元素是否存在,如果是,请检查是否entrySet.isEmpty()。如果是,请删除该元素。 但我不知道如何完成迭代...

2 个答案:

答案 0 :(得分:7)

在将{}传递给GSON之前,你不能只用NULL替换它吗?

答案 1 :(得分:1)

按照以下方式制作TypeAdapter<String> read方法:

public String read(JsonReader reader) throws IOException {
    boolean nextNull = false;
    while (reader.peek() == JsonToken.BEGIN_ARRAY || reader.peek() == JsonToken.END_ARRAY) {
        reader.skipValue();
        nextNull = true;
    }
    return nextNull ? null : reader.nextString();
}

解释:当下一个令牌是[]时,只需跳过它并返回null。

如果您将所有[]替换为null直接使用String#replaceAll,则可能会替换某些真实字符串,这可能会导致其他一些错误。