试图用Python解析JSON。 ValueError:期望属性名称

时间:2012-02-08 04:34:44

标签: python json twitter

我正在尝试将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)

4 个答案:

答案 0 :(得分:28)

这绝对不是JSON - 不管怎么说都不是。它已被解析为Python对象 - JSON将具有false,而不是False,并且不会为unicode显示字符串u(所有JSON字符串都是unicode)。你确定你没有让你的json字符串在链中的某个地方变成一个免费的Python对象,因此加载到json.loads()显然是错误的,因为实际上它不是一个字符串?

答案 1 :(得分:27)

有时您可能会遇到此错误,因为python无法很好地识别您的字符串值。举个例子:我花了很多时间寻找这种错误的起源。这是我发现的。

有时一种语言会识别一种引用,而不是另一种语言: 顺便说一句,要在JavaScript中解析一个字符串到json,所有引号都必须在'format

在JavaScript中将字符串解析为json所有引号必须采用“不是真正逻辑的格式。”

希望您可以使用替换功能。对于Python:

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

希望它可以节省你花在寻找这个bug上的时间!

答案 2 :(得分:7)

当我在属性列表的末尾有一个挂起的逗号时出现此错误。由于逗号,它期待另一个属性名称,但没有。

答案 3 :(得分:0)

确保您的JSON文件没有以//开头的行(错误地应该注释!)。我有同样的ValueError消息,在我从文件中删除//后它就消失了。