600 Stimmen

JSONDecodeError: Wert erwartet: Zeile 1 Spalte 1 (Zeichen 0)

Ich erhalte den Fehler Expecting value: line 1 column 1 (char 0), wenn ich versuche, JSON zu decodieren.

Die URL, die ich für den API-Aufruf verwende, funktioniert im Browser einwandfrei, gibt aber diesen Fehler aus, wenn sie über einen Curl-Aufruf erfolgt. Folgendes ist der Code, den ich für den Curl-Aufruf verwende.

Der Fehler tritt bei return simplejson.loads(response_json) auf

response_json = self.web_fetch(url)
response_json = response_json.decode('utf-8')
return json.loads(response_json)

def web_fetch(self, url):
    buffer = StringIO()
    curl = pycurl.Curl()
    curl.setopt(curl.URL, url)
    curl.setopt(curl.TIMEOUT, self.timeout)
    curl.setopt(curl.WRITEFUNCTION, buffer.write)
    curl.perform()
    curl.close()
    response = buffer.getvalue().strip()
    return response

Traceback:

Datei "/Users/nab/Desktop/myenv2/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
Datei "/Users/nab/Desktop/pricestore/pricemodels/views.py" in view_category
  620.     apicall=api.API().search_parts(category_id= str(categoryofpart.api_id), manufacturer = manufacturer, filter = filters, start=(catpage-1)*20, limit=20, sort_by='[["mpn","asc"]]')
Datei "/Users/nab/Desktop/pricestore/pricemodels/api.py" in search_parts
  176.         return simplejson.loads(response_json)
Datei "/Users/nab/Desktop/myenv2/lib/python2.7/site-packages/simplejson/__init__.py" in loads
  455.         return _default_decoder.decode(s)
Datei "/Users/nab/Desktop/myenv2/lib/python2.7/site-packages/simplejson/decoder.py" in decode
  374.         obj, end = self.raw_decode(s)
Datei "/Users/nab/Desktop/myenv2/lib/python2.7/site-packages/simplejson/decoder.py" in raw_decode
  393.         return self.scan_once(s, idx=_w(s, idx).end())

Ausnahmetyp: JSONDecodeError bei /pricemodels/2/dir/
Ausnahme-Wert: Expecting value: line 1 column 1 (char 0)

28voto

Galuoises Punkte 1717

Ich hatte das gleiche Problem beim Lesen von JSON-Dateien mit

json.loads("file.json")

Ich habe das Problem gelöst mit

with open("file.json", "r") as read_file:
   data = json.load(read_file)

vielleicht kann dir das in deinem Fall helfen

19voto

Alex W Punkte 34972

Oft liegt das daran, dass der zu analysierende String leer ist:

>>> import json
>>> x = json.loads("")
Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/__init__.py", line 348, in loads
    return _default_decoder.decode(s)
  File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Wert erwartet: Zeile 1 Spalte 1 (Zeichen 0)

Lösung wäre es zu überprüfen, ob json_string vorher leer ist:

import json

if json_string:
    x = json.loads(json_string)
else:
    # Dein Code/Logik hier
    x = {}

18voto

user9571515 Punkte 289

Ich bin auf das gleiche Problem gestoßen, als ich den aus einer JSON-Datei geöffneten JSON-String ausgedruckt habe und festgestellt habe, dass der JSON-String mit '' beginnt, was darauf zurückzuführen ist, dass die Datei standardmäßig mit UTF-8 decodiert wird, und durch Ändern der Kodierung in utf-8-sig wird das Zeichen entfernt und das Laden der JSON ohne Probleme ermöglicht:

open('test.json', encoding='utf-8-sig')

8voto

Aditya Rajgor Punkte 775

Dies ist die minimalistische Lösung, die ich gefunden habe, wenn Sie eine JSON-Datei in Python laden möchten

import json
data = json.load(open('file_name.json'))

Wenn dies einen Fehler anzeigt, der besagt, dass das Zeichen an Position X und Y nicht übereinstimmt, fügen Sie einfach encoding='utf-8' innerhalb der runden Klammer von open hinzu

data = json.load(open('file_name.json', encoding='utf-8'))

Erklärung open öffnet die Datei und liest den Inhalt, der später in json.load geparst wird.

Beachten Sie, dass die Verwendung von with open() as f zuverlässiger ist als die obige Syntax, da sichergestellt wird, dass die Datei nach der Ausführung geschlossen wird. Die vollständige Syntax würde sein

with open('file_name.json') as f:
    data = json.load(f)

7voto

Ich hatte das gleiche Problem, in meinem Fall habe ich es so gelöst:

import json

with open("migrate.json", "rb") as read_file:
   data = json.load(read_file)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X