我正在尝试使用Google的gson库解析json数据。但是json数据表现不佳。
当一切正常时,看起来确实如此:
{
"parent": {
"child_one": "some String",
"child_two": "4711",
...
}
}
child_one
应解析为String
,child_two
为int
。
但有时其中一个孩子没有导致空对象而不是null
的值,如下所示:
{
"parent": {
"child_one": "some String",
"child_two": {},
...
}
}
我没有权限改变json feed,因此我必须在反序列化期间处理它。
但我迷失在这里。如果我让解析第二个案例给我一个JsonSyntaxException
。
我考虑过使用自定义JsonDeserializer
。如果它是JsonObject
,那么检查每个元素是否存在,如果是,请检查是否entrySet.isEmpty()
。如果是,请删除该元素。
但我不知道如何完成迭代...
答案 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
,则可能会替换某些真实字符串,这可能会导致其他一些错误。