Android 使用gson或jackson解析json,其中字段可以有两种不同的类型

Android 使用gson或jackson解析json,其中字段可以有两种不同的类型,android,json,gson,jackson,deserialization,Android,Json,Gson,Jackson,Deserialization,我有一个包含两种不同类型字段的json "fields":[{"value":"ZIELONE OKO"},{"value":{"@nil":"true"}}] 我在反序列化这些方面有问题。我的模型类包含: private String value; 我只需要将{“@nil”:“true”}转换为null。现在我得到一个错误: The JsonDeserializer StringTypeAdapter failed to deserialized json object {"@nil":"

我有一个包含两种不同类型字段的json

"fields":[{"value":"ZIELONE OKO"},{"value":{"@nil":"true"}}]
我在反序列化这些方面有问题。我的模型类包含:

private String value;
我只需要将{“@nil”:“true”}转换为null。现在我得到一个错误:

The JsonDeserializer StringTypeAdapter failed to deserialized json object {"@nil":"true"} given the type class java.lang.String

理想情况下,我会更改生成奇怪JSON的代码:第二个值不应该是JSON null吗?我猜它是由一些复杂的过程产生的,从XML开始(必须使用'isNul'来区分空字符串和空字符串)


但如果这是不可能的,我认为杰克逊和格森都需要自定义反序列化程序;或者先绑定到泛型映射,然后显式处理值异常。在第二种情况下,您只需将要绑定的类型声明为映射(可以使用引用的泛型类型信息;但这应该是可选的)。

我知道更改json将是最佳选择,但这不值得讨论。似乎我需要某种自定义反序列化程序,但问题是如何实现?GSon和Jackson的文档都展示了自定义序列化程序和反序列化程序的示例。例如,对于Jackson(),Gson()。@StaxMan指向Gson自定义序列化/反序列化的链接已更改:更多信息Gson自定义序列化/反序列化(很抱歉使用url缩写器,但堆栈溢出不喜欢javadoc链接)