【问题标题】:GSON JsonElement to StringGSON JsonElement 到字符串
【发布时间】:2015-07-20 16:28:44
【问题描述】:

我在将 JsonElement 转换为字符串时遇到了一些问题。我正在使用 getAsString() 方法调用,但我不断收到不支持的操作异常。我检查了我正在调用的 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”,如第二个快照中的那样?
  • 我得到一个日历的 ID,然后用那个 ID 获取日历数据。 “开始”出现在我从该日历收到的事件中,当我打印 JsonElement 时,它看起来像这样 {“dateTime”:“2015-09-10T12:05:00-04:00”}。我只是无法将其转换为字符串...

标签: java json gson


【解决方案1】:

item.get("start") 是否有可能是 JsonNull

先检查:

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

【讨论】:

  • 我只是再次运行它进行检查,它不为空,正如我在上面评论的那样,它返回 {"dateTime":"2015-09-10T12:05:00-04:00"}当我尝试将它作为字符串获取时只是错误。
  • @tallaghi 你介意发布你正在使用的 json 字符串吗?这样我们可以更轻松地为您提供帮助
  • 我正要发Json的时候发现问题,我没有格式化Json去看,漏掉了一个对象。感谢您帮助我指出这一点。
  • @Алексей 你是我今天的新英雄!很好的回复!
【解决方案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);
}

【讨论】:

  • 你在回答问题的哪一部分?
猜你喜欢
  • 1970-01-01
  • 2013-03-07
  • 2018-08-05
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多