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

本文解决Python中使用json.loads()遇到的JSONDecodeError问题,包括单引号替换为双引号、处理特殊类型如日期和嵌套数据,确保JSON格式正确。

问题描述

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
### JSONDecodeError: Expecting property name enclosed in double quotes 的原因与解决方案 #### 错误原因 JSONDecodeErrorPython 中 `json` 模块解析 JSON 数据抛出的异常。当解析器遇到不符合 JSON 格式规范的数据,会引发此错误。具体到 "Expecting property name enclosed in double quotes" 这一错误信息,表示 JSON 数据中的键名未使用双引号包裹[^1]。JSON 规范要求所有键名必须用双引号括起来,单引号或无引号都会导致解析失败。 #### 示例问题代码 以下是一个典型的错误示例: ```python import json data = "{key: 'value'}" json.loads(data) ``` 运行上述代码将抛出 `JSONDecodeError: Expecting property name enclosed in double quotes`,因为键名 `key` 未使用双引号。 #### 解决方案 以下是修复该错误的方法: 1. **确保 JSON 数据符合规范** 将所有键名用双引号括起来。例如,将 `{key: 'value'}` 修改为 `{"key": "value"}`。 ```python import json data = '{"key": "value"}' result = json.loads(data) print(result) # 输出:{'key': 'value'} ``` 2. **检查输入来源** 如果 JSON 数据来自外部(如文件、API 或用户输入),需要验证数据格式是否正确。可以使用正则表达式或其他工具预处理数据[^2]。 3. **使用 `demjson` 模块** `demjson` 是一个支持更宽松 JSON 格式的库,能够解析单引号包裹的键名或值。安装方法如下: ```bash pip install demjson ``` 使用示例: ```python import demjson data = "{key: 'value'}" result = demjson.decode(data) print(result) # 输出:{'key': 'value'} ``` 4. **手动修正 JSON 数据** 如果无法修改数据源,可以通过字符串替换的方式临修正。例如: ```python data = "{key: 'value'}" fixed_data = data.replace("'", '"').replace('key:', '"key":') result = json.loads(fixed_data) print(result) # 输出:{'key': 'value'} ``` 5. **调试与日志记录** 在开发过程中,建议添加日志记录以捕获和分析错误数据。例如: ```python try: result = json.loads(data) except json.JSONDecodeError as e: print(f"JSON Decode Error: {e}") ``` #### 注意事项 - 确保 JSON 数据中没有其他格式错误(如多余的逗号、不匹配的括号等)[^3]。 - 在生产环境中尽量避免使用非标准库(如 `demjson`),以减少潜在的安全风险。 ### 总结 通过确保 JSON 数据符合规范、使用适当的库或工具以及添加调试机制,可以有效解决 `JSONDecodeError: Expecting property name enclosed in double quotes` 错误。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XerCis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值