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

时间:2012-02-17 08:00:59

标签: scala playframework gson

运行游戏!使用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

我收到的唯一错误是Unsupported Operation Exception: null,我在getAsString以及getAsJsonObjectgetAsJsonPrimitive

上尝试了此操作

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

4 个答案:

答案 0 :(得分:47)

也许您的JsonElementJsonNull

您可以做的是首先使用json.isJsonNull

检查不是

否则,尝试使用json.toString

获取其String表示形式

答案 1 :(得分:41)

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

答案 2 :(得分:9)

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

private String getNullAsEmptyString(JsonElement jsonElement) {
        return jsonElement.isJsonNull() ? "" : jsonElement.getAsString();
    }

所以而不是

val geocoder = json.getAsString

你可以使用这个

val geocoder = getNullAsEmptyString(json);

如果元素为null,则返回“”,如果不是

,则返回实际字符​​串

答案 3 :(得分:0)

对于任何JsonElement方法,类Unsupported Operation Exception都将抛出getAs<Type>,因为它是一个抽象类,并且以这种方式实现是有意义的。

由于某种原因,类JsonObject无法实现getAs<Type>方法,因此对这些方法之一的任何调用都会引发异常。

toString对象上调用JsonElement方法,可能会在某些情况下解决您的问题,但可能不是您想要的,因为它将json表示形式返回为String(例如{{1} })。

我发现还存在一个\"value\"类,它确实实现了JsonPrimitive方法。因此,正确的处理方式可能是这样的:

getAs<Type>

PS。我删除了所有可空性mgmt部分。如果您使用Java进行编码,则可能希望以更好的方式进行管理。

请参见 String input = "{\"key1\":\"value1\",\"key2\":\"value2\"}"; JsonParser parser = new JsonParser(); JsonElement jsonTree = parser.parse(input); if(jsonTree != null && jsonTree.isJsonObject()) { JsonObject jsonObject = jsonTree.getAsJsonObject(); value = jsonObject.get("key1").getAsJsonPrimitive().getAsString() } 的GitHub源代码: https://github.com/google/gson/blob/master/gson/src/main/java/com/google/gson/JsonElement.java#L178