2015-07-20 31 views
4

我在將JsonElement轉換爲字符串時遇到了一些麻煩。我正在使用getAsString()方法調用,但我不斷得到一個不受支持的操作異常。我檢查了我打電話的輸出,看起來是正確的。GSON JsonElement轉換爲字符串

這裏是我的代碼,對不起,我可憐的命名約定:

JsonParser jp2 = new JsonParser(); 
JsonObject root2 = jp2.parse(getAllEventsResults.get_Response()).getAsJsonObject(); 
JsonArray items2 = root2.get("items").getAsJsonArray(); 

for(int i=0; i<items2.size(); i++){ 
    JsonObject item = items2.get(i).getAsJsonObject(); 
    System.out.println(item.get("start").getAsString());} 

這樣做的最奇怪的是,我做同樣的事情在上面這段代碼:

JsonParser jp = new JsonParser(); 
JsonObject root = jp.parse(getAllCalendarsResults.get_Response()).getAsJsonObject(); 
JsonArray items = root.get("items").getAsJsonArray(); 
JsonObject firstItem = items.get(0).getAsJsonObject(); 
String firstCalId = firstItem.get("id").getAsString(); 
+0

你確定你的JSONObject同時包含「開始」和「ID」,或只是「ID」作爲第二個快照? – kiruwka

+0

我得到日曆的ID,然後用該ID獲取日曆數據。 「start」是我從日曆中收到的事件,當我打印JsonElement時,它看起來像這樣{「dateTime」:「2015-09-10T12:05:00-04:00」}。我只是不能把它轉換成字符串... – tallaghi

回答

7

難道item.get("start")JsonNull

做檢查第一:

item.get("start").isJsonNull() ? "" : item.get("start").getAsString(); 
+0

我只是再次運行它檢查,它不是空的,因爲我上面評論它返回{「dateTime」:「2015-09-10T12:05:00-04:00」 }只是錯誤,當我試圖把它作爲一個字符串。 – tallaghi

+0

@tallaghi你介意發佈你正在使用的json字符串嗎?這樣我們可以更容易地幫助您 –

+0

當我發現問題時,我正要發佈Json,我沒有格式化Json以查看它並錯過了一個對象。感謝您幫助我指出。 – tallaghi

2

我發現Gson是非常直接的,對編組和將一個對象解組成json有用,反之亦然。

這是兩個輔助方法簡單..

/** 
* Converts an object to a Json String 
* 
* @param obj  - The object to convert to Json 
* @param dfString - data format pattern. 
* @return 
*/ 
public static String toJson(Object obj, String dfString) { 
    Gson gson = new GsonBuilder().setDateFormat(dfString).create(); 
    return gson.toJson(obj); 
} 


/** 
* Converts a Json String to the specified Class<T> 
* 
* @param json - The Json String to covert to Class<T> instance 
* @param obj - The Class<T> representation of the Json String 
* @return 
*/ 
public static <T> T fromJson(String json, Class<T> obj, String dfString) { 
    Gson gson = new GsonBuilder().setDateFormat(dfString).create(); 
    return gson.fromJson(json, obj); 
} 
+2

問題的答案是什麼? –

+0

我在回答這個隱含的問題:「有什麼更好的嗎?」它被稱爲在框外思考.. –