有效的JSON给出了JSONDecodeError: 期望有逗号分隔符。

72

我正在尝试解析来自Youtube API的JSON响应数据,但是一直在遇到错误。

以下是出现问题的代码片段:

data = json.loads("""{ "entry":{ "etag":"W/\"A0UGRK47eCp7I9B9WiRrYU0.\"" } }""")

发生了这个:

JSONDecodeError: Expecting , delimiter: line 1 column 23 (char 23)

我已确认它是有效的 JSON,并且我无法控制其格式,那么我该如何解决这个错误?


另外,您可能需要检查您的 JSON 是否所有行都以逗号结尾,除了最后一行。 - arnold
2个回答

98
您需要在双引号前加 r,或将所有的 \ 替换为 \\。这不是您在从其他地方读取json时需要关心的事情,而是字符串本身的问题。 data = json.loads(r"""{ "entry":{ "etag":"W/\"A0UGRK47eCp7I9B9WiRrYU0.\"" } }""") 更多信息请参见此处

7
好的,但您需要解释原因。为了避免错误解释 \" 反斜杠转义符,需要将输入传递为原始字符串。 - smci
27
如果字符串存储在一个变量中,解决方案是什么? - Praneeth Kumar
将一个原始字符串存储在变量中。 - Jacob Bayer
将一个变量存储为原始字符串。 - Jacob Bayer
@sheth7 raw_json = r"""{ "entry":{...}}""" @sheth7 raw_json = r"""{ "entry":{...}}""" - bwdm
显示剩余2条评论

17

在你的 JSON 字符串之前需要添加 r

>>> st = r'{ "entry":{ "etag":"W/\"A0UGRK47eCp7I9B9WiRrYU0.\"" } }'
>>> data = json.loads(st)
>>>

1
我认为最好使用"""而不是'来包含json,因为数据中可能会有未转义的单引号。感谢您的回答。 - userBG
@ofko:我知道我刚刚写了这个来表达清晰。 - RanRag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接