我想为一个特定的字段或类序列化空值。我也研究了堆栈溢出,但没有看到结果。
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.serializeNulls().create();
我用了,但是没有用,我的Json结果是两种类型,Pojo崩溃的时候就像第一种情况。
"character": {
"id": "",
"name": ""
},
"character": {
"id": 10,
"name": "İrem"
}
我的崩溃日志:
com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: empty String
at com.google.gson.internal.bind.TypeAdapters$7.read(TypeAdapters.java:228)
at com.google.gson.internal.bind.TypeAdapters$7.read(TypeAdapters.java:218)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
美波霍
@SerializedName("name")
private String name;
@SerializedName(value = "id")
private Integer id; // or private int id; Both are failing.
4条答案
按热度按时间xqkwcwgp1#
1)第一个选项,不接收
String
。如果号码不可用,您应该接收null
。因此,它看起来像这样:这将解决问题。
2)第二种选择-更改数据模型,不查找
Integer
,而只查找Object
。所以一旦你这样解析它:
要使用
id
字段,您必须执行以下操作:就是这样!
3)第三种选择:有两个数据模型。
第一个为
Integer
:第二个用于
String
:所以当你解析它的时候,你会把它解析成一个
JsonObject
:然后检查您需要Map到的位置:
我真心推荐第一种选择-它更干净,而且是正确的做法。
2g32fytz2#
您的问题是
id
是String
,而不是"character": { "id": "", "name": "" }
中的Integer
。您应该从后端修复它。mxg2im7a3#
可能的解决方案有2:
String
或Number
(被Json
接受-Json
中没有这样的Double
或Integer
)。1.遵循small tutorial,它告诉你如何为你的类创建一个定制的解析器。你要做的是在解析id的时候检查它的示例,如果提供了一个空的/无效的
String
,总是使用一个Integer
(或者一个null
值)。llew8vvj4#
如果要防止在阅读json值时出现空指针异常,还可以执行以下方法:
1.)转换为com.google.gson.jsonObject格式
2.)检查元素是否存在且不为JsonNull