2015-07-20 856 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

我在回答这个隐含的问题:“有什么更好的吗?”它被称为在框外思考.. –