GSON JsonObject"不支持的操作异常:null"getAsString

cro*_*ies 39 scala gson playframework

跑步!使用Scala的应用程序.我正在做一个请求,其中响应应该是一个JSON字符串.检查调试器时,JsonElement将返回OK,其中包含所有预期的信息.但问题是当我尝试在JsonElement上实际运行方法时.

val json = WS.url("http://maps.googleapis.com/maps/api/geocode/json?callback=?&sensor=true&address=%s", startAddress+","+startCity+","+startProvince).get.getJson
    val geocoder = json.getAsString
Run Code Online (Sandbox Code Playgroud)

我回来的唯一错误是Unsupported Operation Exception: null,我已经在尝试这样做getAsString,并getAsJsonObjectgetAsJsonPrimitive

知道为什么它在所有方法上都失败了吗?谢谢.

and*_*lla 51

也许是你JsonElementJsonNull

你可以做的是首先检查它是不是通过使用 json.isJsonNull

否则,尝试获取其String表示 json.toString


小智 49

我有类似的问题,我不得不将jsonObject.getAsString()更改为jsonObject.toString();

  • 查看github存储库,似乎尚未实现getAsString()方法。无论如何,它只会引发不受支持的异常。https://github.com/google/gson/blob/master/gson/src/main/java/com/google/gson/JsonElement.java (2认同)

Hen*_*nry 9

在我的情况下,我只需要将元素作为空字符串,如果它是null,所以我写了一个这样的函数:

private String getNullAsEmptyString(JsonElement jsonElement) {
        return jsonElement.isJsonNull() ? "" : jsonElement.getAsString();
    }
Run Code Online (Sandbox Code Playgroud)

而不是

val geocoder = json.getAsString
Run Code Online (Sandbox Code Playgroud)

你可以使用它

val geocoder = getNullAsEmptyString(json);
Run Code Online (Sandbox Code Playgroud)

如果元素为null,则返回"",如果不为则返回实际字符​​串