Пытается разобрать 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)
Ответы
Ответ 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
, и оно исчезло после того, как я удалил //
из моего файла.