我试图阅读一个简单的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.IllegalState异常:预期STRING
但被BEGIN_OBJECT
我不明白我做错了什么。
你的解析器很好。如果你提供的代码片段真的属于你得到的异常堆栈跟踪,那么我认为你试图解析的JSON的response
属性有一个字符串以外的值。例如
{ "response": "ok" }
您的解析器可以很好地解析。但是,您可以从解析器获得的最接近的异常消息是一个类似于下面的JSON:
{ "response": {"status": "ok"} }
这应该会失败,比如
线程"main"中的异常java.lang.IllegalStateExctive:期望字符串,但BEGIN_OBJECT在第1行第16列路径$。
还请注意,Gson至少在其最新版本中报告了有问题的位置(我用Gson 2.5对其进行了测试)。确保你得到了预期的输入。如果您认为响应必须是您提到的格式,那么只需尝试跟踪输入流并找出差异。以最简单但不是最有效的实现跟踪输入流,您可以有一个更高效的跟踪读取器,如下所示:
private static Reader traceReader(final Reader reader) {
return new Reader() {
@Override
public int read(final char[] buffer, final int offset, final int length)
throws IOException {
final int read = reader.read(buffer, offset, length);
if ( read != -1 ) {
// or any other appropriate tracing output here
out.print(new String(buffer, offset, read));
out.flush();
}
return read;
}
@Override
public void close()
throws IOException {
reader.close();
}
};
}
与:
JsonReader reader = new JsonReader(traceReader(new InputStreamReader(in, "UTF-8")))
然后再检查一下你是否真的得到了{“回复”:“ok”}
。
我正面临一个关于GSON json到Java的问题。我在这里查了很多帖子,但我找不到我的问题的解决方案。所以我在这里列出我的问题。谢谢! 以下是我的Json数据 非常非常感谢!!
问题内容: 我要解析的字符串: 周日2013年11月10日10:00:00 我的代码: 编译器错误输出: java.text.ParseException:无法解析的日期:java.text.DateFormat.parse(Unknown Source)的“ Sun Nov 10 10:00:00 CET 2013” … 问题答案: 可能您缺少正确的语言环境。在您的示例中尝试以下操作:
我正在尝试从XML文件中提取数据。将XML转换为JSON后,我无法访问数据。我正在用GSON解析数据。 这段代码给了我一个错误。 有什么建议吗?提前谢谢。 这是JSON内容: 这是以下类:
如何检查一个字符串是否在另一个字符串中,但匹配项需要在前面,而不是中间或最后。例如,a="
我正在使用Gson解析一个JSON字符串,如下所示: 当我使用以下代码时,一切都很好: 我如何使用GSON使此工作?
问题内容: 假设我们有类似的东西: 我想将“ someText”替换为其他内容。考虑到我不知道someText可能是什么(任何字符串)并且我所知道的是它将被&firstString =和&endString =包围的事实,最佳方法是什么? 编辑:对不起,看起来这还不够清楚。我不知道“ someText”可能是什么,我仅有的信息是它将位于&firstString =和&endString =之间 我