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

问题描述

import json

s = "{'status': 404}"
json.loads(s)

报错JSONDecodeError: Expecting property name enclosed in double quotes,即期望属性名用双引号括起来

解决方案

  1. 【推荐】保存json时调用json.dumps()
d = {'status': 404}
s = json.dumps(d)
json.loads(s)
  1. 替换单引号为双引号s.replace("'", "\"")
s = "{'status': 404}"
json.loads(s.replace("'", "\""))

扩展阅读

  1. 保存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判定即可

  1. 嵌套数据类型和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)

即可

参考文献

  1. python执行json.loads(…)时遇到的错误
  2. Python 对 JSON 中的特殊类型进行 Encoder
发布了248 篇原创文章 · 获赞 89 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/lly1122334/article/details/104608289