Scala “GSON JsonObject”;不受支持的操作异常:null";getAsString
上演一出戏!应用程序与Scala。我正在执行一个请求,其中响应应该是JSON字符串。检查调试器时,JsonElement返回OK,并按预期提供所有信息。然而,问题是当我试图在该JsonElement上实际运行方法时Scala “GSON JsonObject”;不受支持的操作异常:null";getAsString,scala,playframework,gson,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+","
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
我得到的唯一错误是不支持的操作异常:null
,我在getAsString
和getAsJsonObject
和getAsJsonPrimitive
知道为什么所有方法都失败了吗?谢谢。也许您的
jsonement
是一个JsonNull
您可以首先使用json.isJsonNull
否则,请尝试使用
json.toString
获取其字符串表示形式。我遇到了类似的问题,必须将jsonObject.getAsString()
更改为jsonObject.toString()代码>在我的例子中,如果元素为null,我只需要将其作为空字符串获取,因此我编写了如下函数:
private String getNullAsEmptyString(JsonElement jsonElement) {
return jsonElement.isJsonNull() ? "" : jsonElement.getAsString();
}
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()
}
所以不是
val geocoder = json.getAsString
你可以用这个
val geocoder = getNullAsEmptyString(json);
如果元素为null,则返回“”;如果元素不为null,则返回实际字符串。对于任何getAs
方法,类JsonElement
将抛出不支持的操作异常,因为它是一个抽象类,以这种方式实现是有意义的
由于某种原因,类JsonObject
没有实现getAs
方法,因此对其中一个方法的任何调用都会引发异常
在JsonElement
对象上调用toString
方法可能会在某些情况下解决您的问题,但可能不是您想要的,因为在某些情况下,它会将json表示形式返回为字符串(例如\“value\”
)
我发现还存在一个JsonPrimitive
类,它实现了getAs
方法。所以正确的方法可能是这样的:
private String getNullAsEmptyString(JsonElement jsonElement) {
return jsonElement.isJsonNull() ? "" : jsonElement.getAsString();
}
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()
}
另外,我删除了所有可空性管理部分。如果您使用Java编写代码,您可能希望以更好的方式管理它
参见GitHub源代码了解JsonElement
:
是的,成功了,我们并不期待好的ole null。谢谢查看github repo,似乎还没有实现getAsString()方法。不管发生什么,它都会抛出不受支持的异常。我认为这是因为getAsString()函数应该以字符串的形式返回根元素的子属性,而不是根元素本身。如果您有一个json,比如{“foo”:{“bar”:“foobar”},那么调用json.get(“foo”).getAsString()将返回字符串{“bar”:“foobar”}。