当前位置: 首页 > 知识库问答 >
问题:

期待一个字符串,但BEGIN_OBJECT

段劲
2023-03-14

我试图阅读一个简单的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

我不明白我做错了什么。

共有1个答案

鄢朝斑
2023-03-14

你的解析器很好。如果你提供的代码片段真的属于你得到的异常堆栈跟踪,那么我认为你试图解析的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 =之间 我