2016-07-28 2 views
3

Я пытаюсь получить доступ к этому json-файлу: http://www.cloudpricingcalculator.appspot.com/static/data/pricelist.json с Java.JSON Url возвращает что-то еще?

Но когда я его читаю, иногда это дает мне строку JSON (это нормально), и иногда это дает мне что-то еще, и json.simple.parser бросает Unexpected character(<) at position 0. Основываясь на том, что я читал в stackOverflow, возможно, он возвращает XML вместо JSON. Как мой url «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); 

и журнал < сопровождается большим количеством квадратов и неизвестных персонажей, как YO [с> е и ошибки Unexpected character() at position 0.

+1

Возможно, он возвращает вас json, но не завершен, в результате чего синтаксис будет испорчен. Это, для меня, звучит более правдоподобно, чем что-то, возвращающее JSON в один момент, а XML - другое. Может быть, неправильно, хотя интересная проблема :) –

+1

Предлагаю вам записать результат, прежде чем пытаться его разобрать - таким образом вы можете видеть, что происходит, а не гадать. Вы также должны использовать 'StringBuilder', а не конкатенацию строк. –

+0

Если я регистрирую результат, он дает мне что-то с неизвестными символами, начинающимися с <и много квадратов – Romain

ответ

0

Вы находитесь не принимая во внимание сжатие и кодирование ресурса, возвращаемого с сервера. Отклик HEAD запроса заключается в следующем:

[email protected]:~$ 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 
... 

Для избежания этой проблемы, вы можете обернуть поток URL-адрес в GZIPInputStream:

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

И данные, возвращаемые при выполнении readline() будут распакованы.

Смежные вопросы