Подтвердить что ты не робот

Пытается разобрать JSON на Python. ValueError: ожидание имени свойства

Я пытаюсь разобрать объект JSON в Python dict. Я никогда не делал это раньше. Когда я столкнулся с этой конкретной ошибкой, (что не так с первым char?), В других сообщениях сказано, что загружаемая строка на самом деле не является строкой JSON. Я уверен, что это правда.

В этом случае eval() работает нормально, но мне интересно, есть ли более подходящий способ?

Примечание: Эта строка поступает непосредственно из Twitter через инструменты 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)
4b9b3361

Ответ 1

Это определенно не JSON - как бы ни печаталось выше. Он уже был проанализирован в объект Python - JSON имел бы false, а не false и не отображал строки как u для unicode (все строки JSON являются unicode). Вы уверены, что уже не получаете вашу строку json в объект Python бесплатно где-то в цепочке, и, таким образом, загрузка его в json.loads() явно неверна, потому что на самом деле это не строка?

Ответ 2

Иногда вы можете получить эту ошибку, потому что ваши строковые значения не хорошо распознаются python. В качестве примера: я потратил довольно много времени на поиск происхождения такого рода ошибок. Вот что я нашел.

Иногда язык распознает кавычки, а не другой: btw, для синтаксического анализа строки в json в JavaScript все кавычки должны быть в формате

чтобы разобрать строку в json в JavaScript, все кавычки должны быть в формате, который не является действительно логическим.

Надеюсь, вы можете использовать функцию replace. Для Python:

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

Надеюсь, это сэкономит вам время, которое я потратил на поиски этой ошибки!

Ответ 3

Я получил эту ошибку, когда у меня была висячая запятая в конце списка свойств. Из-за запятой ожидалось другое имя свойства, но его не было.

Ответ 4

Убедитесь, что в вашем файле JSON нет строк, начинающихся с // (которые неправомерно допускаются к комментариям!). У меня такое же сообщение ValueError, и оно исчезло после того, как я удалил // из моего файла.