2012-02-17 89 views
29

運行Play!應用程序與斯卡拉。我正在做一個請求,其中的響應預計是一個JSON字符串。在檢查調試器時,JsonElement會返回OK,包含所有預期的信息。但是,問題是當我嘗試在該JsonElement上實際運行方法時。GSON JsonObject「不支持的操作異常:null」getAsString

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,我已經試過這對getAsStringgetAsJsonObjectgetAsJsonPrimitive

任何想法,爲什麼它的失敗對所有的方法呢?謝謝。

回答

36

也許是你JsonElementJsonNull

你可以做的是,首先檢查它是不是用json.isJsonNull

否則,試圖得到它的String表示與json.toString

+1

是的,做了詭計,沒有期待好的零空。謝謝! – crockpotveggies 2012-02-17 08:22:54

+0

json.isJsonNull工作..感謝 – 2015-07-30 14:42:58

33

我有一個類似的問題,我不得不將jsonObject.getAsString()更改爲jsonObject.toString();

+1

莫名其妙地工作,你知道原因嗎? – bheatcoker 2016-04-07 14:30:02

+0

沒有工作,但這。謝謝! – NecipAllef 2016-07-11 03:18:38

+1

看着github倉庫,看起來getAsString()方法還沒有實現。它只是拋出不受支持的異常,無論如何。 https://github.com/google/gson/blob/master/gson/src/main/java/com/google/gson/JsonElement.java – 2017-02-24 19:31:39

7

在我來說,我只是需要得到該元素爲空字符串,如果它是空的,所以我寫了這樣的功能:

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

所以不是

val geocoder = json.getAsString 

你可以只是使用這個

val geocoder = getNullAsEmptyString(json); 

它返回「」,如果元素爲空,實際的字符串,如果它不是