Python使用json加载时出现JSONDecodeError: Expecting property name enclosed in double quotes

问题描述
import json

s = “{‘status’: 404}”
json.loads(s)
1
2
3
4
报错JSONDecodeError: Expecting property name enclosed in double quotes,即期望属性名用双引号括起来

解决方案
【推荐】保存json时调用json.dumps()
d = {‘status’: 404}
s = json.dumps(d)
json.loads(s)
1
2
3
替换单引号为双引号s.replace(“‘”, “\””)
s = “{‘status’: 404}”
json.loads(s.replace(“‘”, “\””))
1
2
扩展阅读
保存json时可能遇到特殊类型不能调用json.dumps()直接保存,需要对特殊类型进行编码
from datetime import date

class CustomDateEncoder(json.JSONEncoder):
def default(self,obj):
if isinstance(obj, date):
return obj.strftime(‘%Y-%m-%d’)
else:
return json.JSONEncoder.default(self, obj)
1
2
3
4
5
6
7
8
d = {‘日期’: date(2020, 3, 2)}
s = json.dumps(d, ensure_ascii=False, cls=CustomDateEncoder)
json.loads(s)
1
2
3
需要编码什么特殊类型再加elif判定即可

嵌套数据类型和None可能出现问题
d = “{‘成绩’: ([‘语文’, 90], [‘数学’, 100], [‘英语’, None])}”
json.loads(d)
1
2
报错JSONDecodeError: Expecting property name enclosed in double quotes

d = “{‘成绩’: ([‘语文’, 90], [‘数学’, 100], [‘英语’, None])}”.replace(“‘”, “\””)
json.loads(d)
1
2
报错JSONDecodeError: Expecting value

d = “{‘成绩’:([‘语文’,90],[‘数学’,100])}”.replace(“‘”, “\””).replace(“(“, “[“).replace(“)”, “]”)
json.loads(d)
1
2
报错JSONDecodeError: Expecting value

d = “{‘成绩’: ([‘语文’, 90], [‘数学’, 100], [‘英语’, None])}”.replace(“‘”, “\””).replace(“(“, “[“).replace(“)”, “]”).replace(“None”, “null”)
json.loads(d)
————————————————

或者,咱们可以换一种方式使用eval来解析这个字符串,直接将字符串变成dict 或者list

ret = eval(s)

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部