it-swarm.com.de

Versuch, JSON in Python zu analysieren. ValueError: Erwartet den Namen der Eigenschaft

Ich versuche, ein JSON-Objekt in eine Python dict zu parsen. Ich habe das noch nie zuvor gemacht. Wenn ich diesen bestimmten Fehler gegoogelt habe (Was stimmt nicht mit dem ersten Zeichen?), Haben andere Beiträge gesagt, dass der geladene String kein JSON-String ist. Ich bin mir aber ziemlich sicher.

In diesem Fall funktioniert eval() gut, aber ich frage mich, ob es einen passenderen Weg gibt?

Hinweis: Dieser String kommt direkt von Twitter über die Ptt-Tools.

>>> import json
>>> line = '{u\'follow_request_sent\': False, u\'profile_use_background_image\': True,
         u\'default_profile_image\': False, 
         u\'verified\': False, u\'profile_sidebar_fill_color\': u\'DDEEF6\',
         u\'profile_text_color\': u\'333333\', u\'listed_count\': 0}'
>>> json.loads(line)

Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
     File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 326, in loads
       return _default_decoder.decode(s)
     File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 366, in decode
       obj, end = self.raw_decode(s, idx=_w(s, 0).end())
     File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 382, in raw_decode
       obj, end = self.scan_once(s, idx)
   ValueError: Expecting property name: line 1 column 1 (char 1)
26
gabe

Das ist definitiv nicht JSON - sowieso nicht wie oben gedruckt. Es wurde bereits in ein Python-Objekt geparst - JSON hätte false und nicht False und würde keine Zeichenfolgen als u für Unicode anzeigen (alle JSON-Zeichenfolgen sind Unicode). Sind Sie sicher, dass Sie Ihren json-String nicht irgendwo in der Kette kostenlos in ein Python-Objekt verwandeln lassen, und daher das Laden in json.loads () offensichtlich falsch ist, weil es tatsächlich keine Zeichenfolge ist?

28
Nick Bastin

Manchmal kann dieser Fehler auftreten, da Ihre Zeichenfolgenwerte von Python nicht richtig erkannt werden. Als Beispiel: Ich habe ziemlich viel Zeit damit verbracht, den Ursprung dieser Art von Fehler zu suchen. Hier ist was ich gefunden habe. 

Manchmal erkennt eine Sprache eine Art von Anführungszeichen und nicht eine andere: Übrigens: Um einen String in Json in JavaScript zu analysieren, müssen alle Anführungszeichen im Format 'formatiert sein

um einen String in Json in JavaScript zu parsen, müssen alle Anführungszeichen im "Format" sein, was nicht wirklich logisch ist.

Hoffentlich können Sie die Ersetzen-Funktion verwenden. Für Python:

json.loads(s.replace("\'", '"'));

Ich hoffe, es wird Ihnen die Zeit ersparen, die ich mit der Suche nach diesem Fehler verbracht habe! 

27
gronaz

Ich habe diese Fehlermeldung erhalten, als ich am Ende einer Liste von Eigenschaften ein hängendes Komma hatte. Aufgrund des Kommas erwartete es einen anderen Eigenschaftsnamen, aber es gab keinen. 

7
Ian Danforth

Stellen Sie sicher, dass Ihre JSON-Datei keine Zeilen enthält, die mit // beginnen (was zu Unrecht Kommentare angenommen hätte). Ich habe die gleiche ValueError-Nachricht und ist verschwunden, nachdem ich den // aus meiner Datei entfernt habe.

0
Aziz Alto