You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.9中json.decoder.JSONDecodeError错误原因咨询:单引号引发的JSON解析异常

为什么你的JSON解析会报JSONDecodeError?

嗨,这个问题其实是JSON语法的严格规范在“搞事情”,我来给你讲明白:

核心原因:JSON只认双引号

JSON是有明确语法标准的,其中一条硬规则就是:所有字符串必须用双引号(")包裹,单引号(')在JSON里是不被当作字符串边界的——它只是一个普通的字符而已。

看你报错的那段代码:

json.loads("['product', 'font', 'graphics', 'photo caption', 'brand', 'advertising', 'technology', 'text', 'graphic design', 'competition']")

你传入的JSON字符串里,数组元素用的是单引号。当json.loads()解析到['product'这部分时,它看到第一个字符[是合法的数组开头,但第二个字符是'——这不是JSON规定的字符串起始标记(应该是"),所以解析器直接在第1行第2列(也就是'的位置)抛出了错误:它期待的是一个合法的JSON值(比如双引号开头的字符串、数字、null等),结果遇到了不认识的单引号,直接懵了。

为什么第二个代码能正常运行?

再看你能成功的代码:

print(json.loads('["a", "b", "c"]'))

这里面的数组元素用的是双引号,完全符合JSON的语法要求,解析器能顺利识别每个字符串,自然就不会报错。

怎么解决这个问题?

把你第一个代码里的单引号全部换成双引号就行,同时注意Python字符串的引号嵌套问题:

  • 可以用单引号包裹整个JSON字符串,内部用双引号:
import json
print(json.loads('["product", "font", "graphics", "photo caption", "brand", "advertising", "technology", "text", "graphic design", "competition"]'))
  • 或者用双引号包裹整个字符串,内部的双引号加转义符\:
import json
print(json.loads("[\"product\", \"font\", \"graphics\", \"photo caption\", \"brand\", \"advertising\", \"technology\", \"text\", \"graphic design\", \"competition\"]"))

最后提醒一句:Python的字符串允许单双引号混用,但JSON是独立的格式,别把两者的规则搞混啦~

内容的提问来源于stack exchange,提问作者SOS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 15:03:09