Java JSON 不预定义所有内容的反序列化

Java JSON deserialization without predefining everything

我知道这个问题可能已经被问过一百次了,但我已经搜索了很多,但找不到我要找的具体内容。

这是我想要的。给定一个字符串 data,我想反序列化为一个没有预定义所有字段的对象 obj。我希望能够请求我想要的字段,例如 obj.getString("stringFieldName")obj.getInt("intFieldName")。我已经将 gson 用于其他用途,所以如果可以使用 gson 那会很棒,尽管不反对使用另一个库。

'standard' Android JSON 库(自 API 1 起)已经提供了这种非类型化访问。

参见JSONObject, eg. getInt

Returns the value mapped by name if it exists and is an int or can be coerced to an int, or throws otherwise.

除非需要将 JSON 映射到 'native' Java 集合类型,否则这可能是实现请求的最简单方法。它不需要任何额外的库。

您是否尝试过使用 Square 中的 Retrofit?它与 GSON 和 Java 注释一起使用,而且设置起来非常容易。

使用 Jackson 库,您可以使用

注释数据模型 class
@JsonIgnoreProperties(ignoreUnknown = true)

jacksonconverter 只会解析您定义的这些字段。其他将被忽略。