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
相关产品推荐
相关产品推荐

