GSON JsonElement转换为字符串

16

我在将JsonElement转换为字符串时遇到了一些���烦。我正在使用getAsString()方法调用,但是我一直收到Unsupported Operation Exception的错误。我检查了我调用的get的输出,它���起来是正确的。

这是我的代码,对于不良的命名惯例我很抱歉:

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();

你确定你的JsonObject包含了"start"和"id"两个属性,还是只有像第二张快照中那样只有"id"属性? - kiruwka
我获取一个日历的ID,然后使用该ID获取日历数据。 "start" 在我从该日历接收到的事件中,当我打印JsonElement时,它看起来像这样 {"dateTime":"2015-09-10T12:05:00-04:00"}。我只是无法将其转换为字符串... - tallaghi
2个回答

19

请问 item.get("start") 可能是一个 JsonNull 吗?

请先进行检查:

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

我刚刚再次运行它进行检查,它不是空的。正如我之前所评论的,它返回了{"dateTime":"2015-09-10T12:05:00-04:00"},但在尝试将其作为字符串获取时出现错误。 - tallaghi
@tallaghi,您介意发布正在使用的JSON字符串吗?这样我们可以更容易地帮助您。 - Алексей
我正要发布Json时发现了问题,我没有格式化Json以查看它并错过了一个对象。谢谢你帮我指出这一点。 - tallaghi
@Алексей,你是今天我的新英雄!回复太棒了! - Shinerrs

0
我发现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);
}

7
你需要我翻译的内容是:“What part of the question are you answering?”。 - Sotirios Delimanolis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接