【发布时间】:2014-06-07 20:14:07
【问题描述】:
我希望有人能告诉我我做错了什么......
我正在使用 sendgrid 进行电子邮件跟踪,它正在发布如下 JSON:
[
{
"email": "john.doe@sendgrid.com",
"timestamp": 1337966815,
"event": "click",
"url": "http://sendgrid.com"
"userid": "1123",
"template": "welcome"
}
]
现在我想获取例如“时间戳”的值,即 1337966815 。我尝试了以下方法:
StringBuffer jb = new StringBuffer();
String line = null;
try {
BufferedReader reader = req.getReader();
while ((line = reader.readLine()) != null)
jb.append(line);
} catch (Exception e) { /*report an error*/ }
String jsonString = jb.toString();
Gson gson = new Gson();
JsonObject jsonObject = gson.fromJson(jsonString, JsonObject.class);
String timeStam = jsonObject.get(timestamp).toString();
jsonString 的字符串给了我以下我认为正确的格式:
[ { "email": "john.doe@sendgrid.com", "timestamp": 1337966815, "event": "click", "url": "http://sendgrid.com" "userid": "1123", "template": "welcome" }]
但我在这行代码中遇到以下错误 - JsonObject jsonObject = gson.fromJson(jsonString, JsonObject.class);
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 52
我做错了什么?是jsonString的格式混淆了JsonObject吗?
非常感谢任何帮助。
亲切的问候 弗朗索瓦
【问题讨论】:
-
你的 json 完整吗?因为它看起来像那些 '[' 和 ']' 的 jsonArray。
-
您的 JSON 无效,它会告诉您这一点。除此之外,您首先如何使用 Gson 是值得怀疑的。如果您想要
JsonObject而不是到 POJO 的映射,请参阅 stackoverflow.com/questions/4110664/… -
感谢 Brian 和 Amrut 的回复。是的,它是一个完整的 JSON。我想我错过了 JSONParser,我会尝试一下。
-
这是一个 JSON 数组,而不是 JSON 对象,那么为什么要尝试反序列化为 JsonObject?另外,为什么要费力把它全部喝完然后把它交给Gson? Gson 可以为您做到这一点
-
嗨,fge,你是什么意思? gson 不需要字符串吗?