我正在尝试使用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.
答案 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()
时返回的数据将被解压缩。