如何修复'JsonNull无法强制转换为JsonObject'

时间:2019-07-18 13:27:19

标签: java json gson

我调用了一个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

2 个答案:

答案 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());