我调用了一个post API,该API会提供有关特定地址的详细信息,但是返回的某些响应没有数据,因此将它们返回为null。如何停止代码中的转换错误?
我目前仅以Json对象的形式获取数据,并且不确定如何重做代码,因此当返回JsonNull元素时,我可以处理该数据。
JsonElement element = new JsonParser().parse(jsonString);
JsonObject jsonObject = element.getAsJsonObject();
jsonObject = jsonObject.getAsJsonObject("response");
String buildName = jsonObject.get("buildingName").getAsString();
String buildNum = jsonObject.get("premisesNumber").getAsString();
String streetName = jsonObject.get("streetName").getAsString();
我希望返回的要么是有效地址的地址详细信息,要么是无效地址的所有信息。
产生的错误是这样的:java.lang.ClassCastException:com.google.gson.JsonNull无法转换为com.google.gson.JsonObject
答案 0 :(得分:0)
通常最好验证数据是否为JSON有效
public static boolean isJSONValid(String test) {
try {
new JSONObject(test);
} catch (JSONException ex) {
try {
new JSONArray(test);
} catch (JSONException ex1) {
return false;
}
}
return true;
}
如果字符串是有效的JSON对象(可以是对象或对象数组),则上述函数将返回true。
之后,您可以继续使用Jackson lib或GSON lib
进行解析。答案 1 :(得分:0)
在getAsString()之前检查isJsonNull()。如果object为Null,它将返回true。
您可以按以下方式重写代码
String buildName= (jsonObject.get("buildingName").isJsonNull ? null : jsonObject.get("buildingName").getAsString());