2016-07-28 10 views
3

Ich versuche, auf diese JSON-Datei zuzugreifen: http://www.cloudpricingcalculator.appspot.com/static/data/pricelist.json mit Java.JSON Url gibt etwas anderes zurück?

Aber wenn ich es lese, gibt es mir manchmal eine JSON-Zeichenfolge (das ist in Ordnung) und manchmal gibt es mir etwas anderes und json.simple.parser werfen eine Unexpected character(<) at position 0. Basierend auf was ich in StackOverflow gelesen habe, kann es sein, dass es XML statt JSON zurückgibt. Da meine URL "JSON" ist, wie ist es möglich?

Hier ist der Code ich verwende:

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); 

und das Protokoll < durch eine Menge von Plätzen und unbekannte Zeichen wie YO [s> È und einem Fehler Unexpected character() at position 0.

+1

Möglicherweise gibt es Sie json zurück, aber unvollständig, wodurch die Syntax durcheinander gebracht wird. Das klingt für mich plausibler als etwas, das JSON einen Moment und XML den anderen zurückgibt. Könnte aber falsch sein, interessantes Problem :) –

+1

Ich schlage vor, dass Sie das Ergebnis protokollieren, bevor Sie versuchen, es zu analysieren - so können Sie sehen, was vor sich geht, anstatt zu raten. Sie sollten auch einen 'StringBuilder' anstelle einer solchen String-Verkettung verwenden. –

+0

Wenn ich das Ergebnis protokolliere, gibt es mir etwas mit unbekannten Zeichen, das mit Romain

Antwort

0

Du bist folgt die Komprimierung und Codierung der vom Server zurückgegebenen Ressource wird nicht berücksichtigt. Die Antwort eines HEAD Anfrage ist folgende:

[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 
... 

Für dieses Problem zu vermeiden, können Sie die URL-Stream in eine GZIPInputStream wickeln:

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

Und die Daten zurückgegeben, wenn readline() Ausführung wird dekomprimiert werden.

Verwandte Themen