问题描述
import json
s = "{'status': 404}"
json.loads(s)
报错JSONDecodeError: Expecting property name enclosed in double quotes
,即期望属性名用双引号括起来
解决方案
- 【推荐】保存json时调用
json.dumps()
d = {'status': 404}
s = json.dumps(d)
json.loads(s)
- 替换单引号为双引号
s.replace("'", "\"")
s = "{'status': 404}"
json.loads(s.replace("'", "\""))
扩展阅读
- 保存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)
d = {'日期': date(2020, 3, 2)}
s = json.dumps(d, ensure_ascii=False, cls=CustomDateEncoder)
json.loads(s)
需要编码什么特殊类型再加elif判定即可
- 嵌套数据类型和None可能出现问题
d = "{'成绩': (['语文', 90], ['数学', 100], ['英语', None])}"
json.loads(d)
报错JSONDecodeError: Expecting property name enclosed in double quotes
d = "{'成绩': (['语文', 90], ['数学', 100], ['英语', None])}".replace("'", "\"")
json.loads(d)
报错JSONDecodeError: Expecting value
d = "{'成绩':(['语文',90],['数学',100])}".replace("'", "\"").replace("(", "[").replace(")", "]")
json.loads(d)
报错JSONDecodeError: Expecting value
d = "{'成绩': (['语文', 90], ['数学', 100], ['英语', None])}".replace("'", "\"").replace("(", "[").replace(")", "]").replace("None", "null")
json.loads(d)
即可