3

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

当一切正常时,它确实看起来像这样:

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

child_one应该被解析为String, child_twoas int。但有时其中一个孩子没有值,这会导致空对象而不是null,如下所示:

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

我无权更改 json 提要,因此我必须在反序列化期间处理它。但我在这里迷路了。如果我让它解析第二种情况,我会得到一个JsonSyntaxException.

我考虑过使用自定义JsonDeserializer. 做一些类似检查每个元素是否是 a 的事情JsonObject,如果是,检查entrySet.isEmpty(). 如果是,请删除该元素。 但我不知道如何完成迭代......

4

2 回答 2

5

您不能在将 {} 传递给 GSON 之前将其替换为 NULL 吗?

于 2013-09-11T20:46:31.913 回答
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();
}

说明:当下一个标记是[or时],跳过它并返回 null。

如果直接全部替换[]使用,也可能nullString#replaceAll替换一些真实的字符串,这可能会导致一些其他的错误。

于 2016-08-27T05:39:43.297 回答