问题由来

最近在用python内置包json的json.loads解析一个网站json样式的字符串的时候,报了如下的错误

JSONDecodeError: Expecting property name enclosed in double quotes:...

从字面上看是说期望属性名用双引号结束,然后去google了一下这个错误,大都回答

都是说字符串中有单引号,然后博主仔细地多次查看了需要解析的字符串,但是并没有发现有单引号。

后来在多次尝试下发现了问题所在。

正确解析

import json
str1 = '{"a":1}'
json1 = json.loads(str1)

上述解析正确

单引号解析

import json
str2 = "{'b': 2}"
json2 = json.loads(str2)

报错JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1),由于有单引号存在而导致的报错

所遇问题简化

import json
str3 = '{"c": 3,}'
json3 = json.loads(str3)

报错Expecting property name enclosed in double quotes: line 1 column 9 (char 8),很显然是,的问题

问题解决

第三方包demjson

可以使用一个第三方包demjson来解决这个问题pip install demjsondemjson Github地址

import demjson
str4 = '{"d": 4,}'
json4 = demjson.decode(str4)

eval

也可以使用eval函数,eval()官方文档地址

str5 = '{"e": 5,}'
json5 = eval(str5)

总结

通过查看源码,一步步地确定问题所在,直到最后解决问题,还是挺有收获的。