当 JSON 不包含某个字段时,Gson 会将其设置为 null 吗?
Will Gson set a field to null when JSON doesn't contain it?
实际上我有很多关于 Gson 的问题。
第一个是当提供的 JSON 不包含任何匹配它的字段时,如果 Gson 将字段的值设置为 null
。
例如,当提供的 JSON 具有字段 name
但 class 我将其反序列化为包含 name
和 avatar
时,avatar
会是无效?
下一个问题与上一个问题有关。当我设置一个具有预定义值的字段时,Gson 会覆盖它,即使它没有在 JSON 中提供(将其覆盖为 null)还是会简单地忽略该字段并继续前进?
最后我想知道当我使用 @SerializedName("username")
但 JSON 包含 name
.[= 时 Gson 是否仍将值设置为 name
31=]
我想更新我的 API,包括 JSON 字段的一些错误命名,但我想让使用它的人尽可能顺利地过渡它,所以我仍然(临时)提供旧的字段名称,同时也提供对新字段的支持。是否可以使用 @SerializedName
注释?
我仍然是 Gson 的初学者,Gson User Guide 对我回答这两个具体问题没有太大帮助(或者我忽略了它,这也是可能的)。
我试过实现这个。这是我的代码。我希望最后的输出能回答你的问题。
JSON 使用:
{
"name": "Robert",
"weather": "19 deg"
}
主要class:
public class GSONExample2 {
private static final String jsonStr = "JSON Mentioned above";
public static void main(String[] args) {
GsonDataExample root = new Gson().fromJson(jsonStr, GsonDataExample.class);
System.out.println(root);
}
}
POJO:
class GsonDataExample {
@SerializedName("username")
private String name;
private String avatar;
@SerializedName(value="weather", alternate = "temperature")
private String weather;
private String nameWithDefault = "Default name";
// getters, setters and toString() implemented
}
输出:
GsonDataExample(name=null, avatar=null, weather=19 deg, nameWithDefault=Default name)
要将多个键映射到相同的属性,您可以使用 @SerializedName(value="weather", alternate = "temperature")
,如上所示。
实际上我有很多关于 Gson 的问题。
第一个是当提供的 JSON 不包含任何匹配它的字段时,如果 Gson 将字段的值设置为 null
。
例如,当提供的 JSON 具有字段 name
但 class 我将其反序列化为包含 name
和 avatar
时,avatar
会是无效?
下一个问题与上一个问题有关。当我设置一个具有预定义值的字段时,Gson 会覆盖它,即使它没有在 JSON 中提供(将其覆盖为 null)还是会简单地忽略该字段并继续前进?
最后我想知道当我使用 @SerializedName("username")
但 JSON 包含 name
.[= 时 Gson 是否仍将值设置为 name
31=]
我想更新我的 API,包括 JSON 字段的一些错误命名,但我想让使用它的人尽可能顺利地过渡它,所以我仍然(临时)提供旧的字段名称,同时也提供对新字段的支持。是否可以使用 @SerializedName
注释?
我仍然是 Gson 的初学者,Gson User Guide 对我回答这两个具体问题没有太大帮助(或者我忽略了它,这也是可能的)。
我试过实现这个。这是我的代码。我希望最后的输出能回答你的问题。
JSON 使用:
{
"name": "Robert",
"weather": "19 deg"
}
主要class:
public class GSONExample2 {
private static final String jsonStr = "JSON Mentioned above";
public static void main(String[] args) {
GsonDataExample root = new Gson().fromJson(jsonStr, GsonDataExample.class);
System.out.println(root);
}
}
POJO:
class GsonDataExample {
@SerializedName("username")
private String name;
private String avatar;
@SerializedName(value="weather", alternate = "temperature")
private String weather;
private String nameWithDefault = "Default name";
// getters, setters and toString() implemented
}
输出:
GsonDataExample(name=null, avatar=null, weather=19 deg, nameWithDefault=Default name)
要将多个键映射到相同的属性,您可以使用 @SerializedName(value="weather", alternate = "temperature")
,如上所示。