使用Scala运行Play!应用程序。我正在执行一个请求,其中的响应应该是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
、getAsJsonObject
和getAsJsonPrimitive
上尝试了这个错误
知道为什么所有方法都失败了吗?谢谢。
5条答案
按热度按时间aelbi1ox1#
我遇到了类似的问题,我不得不将
jsonObject.getAsString()
更改为jsonObject.toString();
3htmauhk2#
也许你的
JsonElement
就是JsonNull
您可以首先使用
json.isJsonNull
检查它是否不正确否则,尝试使用
json.toString
获取其字符串表示形式hgncfbus3#
在我的例子中,我只需要在元素为null时将其作为空字符串获取,因此我编写了一个如下函数:
所以与其
你可以用这个
如果元素为空,则返回“”,否则返回实际字符串
vhipe2zx4#
要添加到@亨利的回答中.本着Kotlins“OrNull”的精神添加一个扩展函数:
u3r8eeie5#
类
JsonElement
将为任何getAs<Type>
方法抛出Unsupported Operation Exception
,因为它是一个抽象类,并且以这种方式实现是有意义的。由于某些原因,类
JsonObject
不实现getAs<Type>
方法,因此对这些方法之一的任何调用都将引发异常。在
JsonElement
对象上调用toString
方法,可能会在某些情况下解决您的问题,但可能不是您想要的,因为在某些情况下,它会将json表示返回为String(例如\"value\"
)。我发现也存在一个
JsonPrimitive
类,并且它确实实现了getAs<Type>
方法。所以正确的处理方法可能如下:PS.我删除了所有的空性管理部分。如果你是用Java编码的,你可能想用更好的方式管理这个。
请参阅
JsonElement
的GitHub源代码:https://github.com/google/gson/blob/master/gson/src/main/java/com/google/gson/JsonElement.java#L178