0

我在基本请求中添加了这个标头:“Accept-encoding”、“gzip”

现在这会导致 MalformedJsonException 敦促我使用 JsonReader.setLenient(true)

我已将我的代码修改为此以支持:

JsonReader jsonReader = new JsonReader(new StringReader(myStringReader with json string));
jsonReader.setLenient(true);
JsonParser parser = new JsonParser();
JsonObject object = parser.parse(jsonReader).getAsJsonObject();

我仍然遇到同样的错误,有人想吗?

4

1 回答 1

1

几件事-

  1. 如果您正在设置 GZIP 标头,这会告诉您正在联系的服务器您能够解压缩 gzip 的响应。您可能正在取回压缩响应,并尝试将其解析为 json - 您需要先解压缩它。

  2. 如果您使用HttpUrlConnection,它会自动设置 gzip 标头为您解压缩。您可以通过代理您的应用程序并查看它发出的 http 请求来确认这一点。

  3. 有趣的HttpUrlConnection是,虽然它会为您设置 gzip 标头并解压缩,但如果您自己设置 gzip 标头,它不会。然后它会依靠你来解压它。

所以简而言之,要么根本不设置标头,而是依靠HttpUrlConnection为您完成所有工作,或者您必须在GZIPInputStreamjson 代码之前使用类解压缩响应,请参阅此答案以获得深入的解释:

如何使用与 .Net 兼容的 GZIPOutputStream 压缩和解压缩字符串?

于 2015-05-17T22:06:20.953 回答