2016-01-03 22 views
8

Ich erhalte diesen Fehler. Ich benutze Python 3.5.1.JSONDecodeError: Erwarteter Wert: Zeile 1 Spalte 1

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Hier ist mein Code:

import json 
import urllib.request 

connection = urllib.request.urlopen('http://python-data.dr-chuck.net/comments_220996.json') 

js = connection.read() 

print(js) 

info = json.loads(str(js)) 

image

Antwort

15

Wenn Sie am Ausgang schauen Sie von print() und auch in Ihrem Traceback erhalten, können Sie den Wert auf Sie zurückkommen sehen werden kein String, es ist ein Byte-Objekt (mit dem Präfix b):

b'{\n "note":"This file ..... 

Wenn Sie die URL mit einem Werkzeug wie curl -v, holen Sie werden sehen, dass der Inhaltstyp

Content-Type: application/json; charset=utf-8 

So ist es JSON, als UTF-8 codiert, und Python ist ein Byte-Stream unter Berücksichtigung, nicht einfach Zeichenfolge. Um dies zu analysieren, müssen Sie es zuerst in eine Zeichenfolge konvertieren.

Ändern Sie die letzte Zeile Code folgt aus:

info = json.loads(js.decode("utf-8")) 
+0

Ich mache die json.loads (js.decode ("utf-8")) aber es gibt einen Fehler AttributeError: 'str' Objekt hat kein Attribut 'decode' –

+0

@ AnwarHussain Dann sind Ihre JSON-Daten (in 'js') bereits eine Zeichenkette (' str') und müssen nicht entschlüsselt werden.Sie können sie direkt an 'json.loads()' übergeben, ohne die Dekodierungsfunktion. 'Json.loads (js) '. –

0

in meinem Fall, einige Zeichen wie ":" '{} [] "vielleicht korrupt das JSON-Format verwenden, so try json.loads (str) außer zur Überprüfung Ihrer Eingabe

Verwandte Themen