尝试在 Python 中解析 JSON。 ValueError:期望属性名称[重复]

Posted

技术标签:

【中文标题】尝试在 Python 中解析 JSON。 ValueError:期望属性名称[重复]【英文标题】:Trying to parse JSON in Python. ValueError: Expecting property name [duplicate] 【发布时间】:2012-02-29 13:37:01 【问题描述】:

我正在尝试将 JSON 对象解析为 Python dict。我以前从来没有这样做过。当我用谷歌搜索这个特定错误时(第一个字符有什么问题?),其他帖子说正在加载的字符串实际上不是 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)

【问题讨论】:

这只是 python 语法,不是 JSON。使用ast.literal_eval 进行安全评估 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

有时一种语言可以识别一种引号,而不是另一种: 顺便说一句,要在 javascript 中将字符串解析为 json,所有引号都必须采用 ' 格式

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

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

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

希望它能为您节省我花费在寻找这个错误上的时间!

【讨论】:

这就是我面临的问题。谢谢 您关于 JavaScript 中 JSON 引号的部分答案看起来有点矛盾。我继续使用 tested 两个 JavaScript 变体(在 Chrome 中)。结果是:您的第三段是正确的:标准 JavaScript 解析器不允许单引号作为字符串文字边界。 BTW The JSON specification 只允许用双引号括起来的字符串,因此这种行为并不特定于 JavaScript 和 Python JSON 解析器。 谢谢!!.. 成功了!【参考方案3】:

当我在属性列表的末尾有一个悬挂逗号时,我收到了这个错误。由于逗号,它期待另一个属性名称,但没有。

【讨论】:

JSON 不允许尾随逗号真是太愚蠢了!而且 json.load 绝对不能给你ValueError: Expecting property name enclosed in double quotes【参考方案4】:

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

【讨论】:

这正是问题所在。谢谢。

以上是关于尝试在 Python 中解析 JSON。 ValueError:期望属性名称[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在Hive中解析嵌套的Json结构?

Python 请求返回 JSON 解码器错误

python操作:json文件中存在NumberInt(0),没有引号,无法解析?

在 Python 中解析多级 JSON

在 python 中使用 argparse 来解析整个 JSON

Python 解析 JSON 数组