java - 如何使用 Gson 反序列化带有可选字段的 json

标签 java json gson

我使用 Gson 通过以下代码反序列化来自给定 API 的 JSON 字符串。

Gson gson = new Gson();
Map<String, CustomDto> test = gson.fromJson(result, new TypeToken<Map<String, CustomDto>>() {}.getType());

CustomDto 是一个由基元(int、long、boolean)和另一个对象构造的对象。我遇到的问题是这个对象是可选的。有时它会被传播,有时它只是不存在。我期待如果 JSON 字符串中缺少一个字段,则不应调用关联的 set 方法(如在 Jackson 中)并且它应该可以正常工作,不幸的是情况并非如此,我遇到了一个异常:

Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 207 column 23

如果我从 CustomDto 中删除该字段,它就可以正常工作,但是如果它被传输就会出现问题。请问是否有一些注释来标记实体类中可选的字段,或者有人可以给我一些建议如何处理这个?

谢谢大家

最佳答案

尝试下面的 Gson 实例

Gson gson = new GsonBuilder().serializeNulls().create();

关于java - 如何使用 Gson 反序列化带有可选字段的 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20747663/

相关文章:

android - 如何使用 Gson 跳过空条目

java - Android Studio - 从 GitHub 添加 ownCloud 库

java - 获取没有字符串键的 Json 值 - Java JSONObject

java - 如果您决定重命名类中的字段,如何读取旧的 json 字符串(使用 gson)

java - 根据多个值对 Json 进行排序

javascript - 如何将 Firebase 用作具有生成键(JS)的关系数据库?

java - jackson - 不要序列化惰性对象

java - eclipse RCP java.lang.NoClassDefFoundError : javax/validation/ConstraintViolationException

java - 制作更改密码的功能

python - 这是将 JSON 数据集加载到 Pandas DataFrames 的最有效方法