Android Gson - 反序列化空值与缺失值
Android Gson - deserializing null vs absent values
我想了解服务器返回值与响应中完全不存在该值的区别。
让我们来看看我目前所拥有的:
data class MyApiResponse(@SerializedName("name") val name: String,
@SerializedName("address") val address: String,
@SerializedName("max_time") val maxTime: Double? = null //this field might BE COMPLETELY absent in response, what will happen here ?
)
关于 maxTime 值,如果服务器响应中完全没有该值,应用程序会崩溃还是该值为空?
问题是我试图区分服务器发送
max_time: null
vs 它完全不存在,gson 是如何处理的?
在这两种情况下,它都将为空。
可能会在这里查看更多信息:
Gson optional and required fields
请尝试这个解决方案:
String json = ""; //Your json has a String
JsonObject jsonObject = new JsonParser().parse(json).getAsJsonObject();
String name = jsonObject.get("name").toString();
String adress = jsonObject.get("address").toString();
//If null, use a default value
JsonElement max_time = jsonObject.get("max_time");
String text = (max_time instanceof JsonNull) ? "" : max_time.getAsString();
String json = ""; //Your json has a String
Gson gson = new GsonBuilder().serializeNulls().create();
MyApiResponse myApiResponse = gson.fromJson(json, YOURCLASSNAME.class);
我想了解服务器返回值与响应中完全不存在该值的区别。
让我们来看看我目前所拥有的:
data class MyApiResponse(@SerializedName("name") val name: String,
@SerializedName("address") val address: String,
@SerializedName("max_time") val maxTime: Double? = null //this field might BE COMPLETELY absent in response, what will happen here ?
)
关于 maxTime 值,如果服务器响应中完全没有该值,应用程序会崩溃还是该值为空?
问题是我试图区分服务器发送
max_time: null
vs 它完全不存在,gson 是如何处理的?
在这两种情况下,它都将为空。 可能会在这里查看更多信息: Gson optional and required fields
请尝试这个解决方案:
String json = ""; //Your json has a String
JsonObject jsonObject = new JsonParser().parse(json).getAsJsonObject();
String name = jsonObject.get("name").toString();
String adress = jsonObject.get("address").toString();
//If null, use a default value
JsonElement max_time = jsonObject.get("max_time");
String text = (max_time instanceof JsonNull) ? "" : max_time.getAsString();
String json = ""; //Your json has a String
Gson gson = new GsonBuilder().serializeNulls().create();
MyApiResponse myApiResponse = gson.fromJson(json, YOURCLASSNAME.class);