JSON Url返回其他内容?

时间:2016-07-28 10:48:01

标签: java json

我正在尝试使用Java访问此json文件:http://www.cloudpricingcalculator.appspot.com/static/data/pricelist.json

但是当我阅读它时,它有时会给我一个JSON字符串(没关系),有时它会给我一些其他东西,json.simple.parser会抛出一个Unexpected character(<) at position 0。 基于我在stackOverflow上读到的内容,可能是它返回XML而不是JSON。由于我的网址是“json”,怎么可能?

以下是我正在使用的代码:

String baseUrl = "http://www.cloudpricingcalculator.appspot.com/static/data/pricelist.json";
...
URL url = new URL(this.baseUrl);
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String l;
String json = "";
System.out.println(url);
while((l=in.readLine()) != null){
  System.out.println(l);
  json+=l;
}
JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(json);

,日志为<,后跟大量正方形和未知字符,如ÿÕ[s>È,错误Unexpected character () at position 0.

1 个答案:

答案 0 :(得分:0)

您没有考虑从服务器返回的资源的压缩和编码。 HEAD请求的响应如下:

rpax@machine:~$ HEAD http://www.cloudpricingcalculator.appspot.com/static/data/pricelist.json
200 OK
Cache-Control: public, max-age=600
Connection: close
Date: Mon, 21 Aug 2017 12:02:14 GMT
Age: 112
ETag: "n_s_jQ"
Server: Google Frontend
Content-Encoding: gzip <---- *HERE*
Content-Length: 7902
Content-Type: application/json
Expires: Mon, 21 Aug 2017 12:12:14 GMT
...

为避免此问题,您可以将网址流包装到GZIPInputStream

GZIPInputStream gis = new GZIPInputStream(url.openStream());
BufferedReader in = new BufferedReader(new InputStreamReader(gis));
// ...

执行readline()时返回的数据将被解压缩。