web-dev-qa-db-fra.com

Essayer d'analyser JSON en Python. ValueError: Nom de propriété en attente

J'essaie d'analyser un objet JSON dans un Python dict. Je n'ai jamais fait cela auparavant. Quand j'ai googlé cette erreur particulière (Quel est le problème avec le premier caractère?), D'autres publications ont dit que la chaîne en cours de chargement n'était pas réellement une chaîne JSON. Je suis à peu près sûr que c'est le cas.

Dans ce cas, eval() fonctionne bien, mais je me demande s’il existe un moyen plus approprié?

Remarque: Cette chaîne provient directement de Twitter, via les outils ptt.

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

Ce n'est certainement pas JSON - pas comme imprimé ci-dessus de toute façon. Il a déjà été analysé dans un objet Python - JSON aurait false, pas False, et ne montrerait pas les chaînes sous la forme u pour unicode (toutes les chaînes JSON sont unicode). Êtes-vous sûr de ne pas transformer votre chaîne json en objet Python gratuitement quelque part dans la chaîne, et donc de la charger dans json.loads () est évidemment fausse, car en réalité ce n'est pas une chaîne?

28
Nick Bastin

Parfois, vous pouvez avoir cette erreur parce que vos valeurs de chaîne ne sont pas bien reconnues par python. Par exemple: j'ai passé beaucoup de temps à chercher l'origine de ce type d'erreur. Voici ce que j'ai trouvé. 

Parfois, une langue reconnaît un type de guillemets et pas un autre:

pour analyser une chaîne dans json en JavaScript, toutes les citations doivent être au format ", ce qui n’est pas vraiment logique.

J'espère que vous pourrez utiliser la fonction de remplacement. Pour Python:

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

J'espère que cela vous fera économiser le temps que j'ai passé à chasser ce bogue! 

27
gronaz

J'ai eu cette erreur quand j'ai eu une virgule suspendue à la fin d'une liste de propriétés. A cause de la virgule, un autre nom de propriété était attendu, mais il n'y en avait pas. 

7
Ian Danforth

Assurez-vous que votre fichier JSON ne contient pas de lignes commençant par // (qui est supposé à tort commenter!) J'ai le même message ValueError et il a disparu après avoir supprimé le // de mon fichier.

0
Aziz Alto