我正在尝试读取一个简单的 JSON 响应:
{
"response": "ok"
}
这是我的代码:
JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
String response = null;
boolean success = false;
reader.beginObject();
if (reader.hasNext()) {
String token = reader.nextName();
if (token.equals("response")) {
response = reader.nextString();
} else {
reader.skipValue();
}
}
reader.endObject();
reader.close();
但我收到此错误:
java.lang.IllegalStateException:应为
STRING
但为BEGIN_OBJECT
我不明白我做错了什么。
原文由 Student 发布,翻译遵循 CC BY-SA 4.0 许可协议
你 的 解析器没问题。如果您提供的代码片段确实属于您获得的异常堆栈跟踪,那么我相信您尝试解析的 JSON 的
response
属性具有字符串以外的值。例如,可以被你的解析器解析得很好。但是,您可以通过解析器获得的最接近的异常消息是类似于以下内容的 JSON:
那应该会失败
另请注意,Gson 至少在其最新版本中报告了有问题的位置(我使用 Gson 2.5 对其进行了测试)。只需确保您获得预期的输入即可。如果您认为响应必须采用您提到的格式,那么只需尝试跟踪输入流并找出差异。以最简单但不是最有效的实现方式跟踪输入流,您可以拥有一个稍微更高效的跟踪读取器,如下所示:
和:
然后重新检查你是否真的得到
{ "response": "ok" }
。