在Python中解析JSON时出现ValueError:期待属性名
我正在尝试把一个JSON对象转换成Python中的一个dict
(字典)。我以前从来没有做过这件事。当我在网上搜索这个特定的错误时,看到其他帖子说加载的字符串其实并不是一个JSON字符串。不过我很确定这就是一个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)
4 个回答
7
我遇到了这个错误,是因为在一组属性的最后加了一个多余的逗号。因为这个逗号,系统以为后面还会有另一个属性名,但实际上并没有。
28
有时候,你可能会遇到这个错误,因为你的字符串值没有被Python正确识别。举个例子,我花了很多时间去找出这种错误的原因。以下是我发现的。
有时候,某种语言只认一种引号,而不认另一种引号:顺便说一下,在JavaScript中,要把字符串解析成JSON,所有的引号必须用'这种格式。
而在JavaScript中,要把字符串解析成JSON,所有的引号必须用"这种格式,这其实不太合理。
希望你可以使用替换功能。对于Python来说:
json.loads(s.replace("\'", '"'));
希望这能帮你节省我花在找这个错误上的时间!
29
这绝对不是JSON格式——至少从上面的样子来看不是。它已经被解析成了一个Python对象。JSON格式应该是false
,而不是False
,而且字符串不会显示成u
,因为所有的JSON字符串都是unicode格式。你确定在某个环节没有把你的JSON字符串自动转换成Python对象吗?如果已经转换了,那再用json.loads()去加载它就明显不对了,因为它其实根本不是字符串。