You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Python中无法对含单引号的JSON字符串执行反序列化操作?

问题根因

你的报错核心是数据库中存储的details字段不符合标准JSON格式要求:

  • 标准JSON强制要求属性名、字符串值必须用双引号包裹
  • 你当前从数据库取出的details值为{'sno':[], 'time':[], 'events':[]},所有引号都是单引号,这是Python字典直接转字符串的输出格式,并非合法JSON串,因此json.loads无法解析。
    更换数据库前功能正常,是因为旧库的写入逻辑会先调用json.dumps把字典转为标准双引号JSON串再入库,新库的写入逻辑缺失了这一步,直接把Python字典的字符串表示写入了数据库。

解决方案

临时修复方案(快速恢复业务)

使用Python内置ast.literal_eval替代json.loads解析字段,该方法可以安全识别Python格式的字典字符串:

import ast

sql.cursorobj.execute("SELECT * FROM timetableevents")
for record in sql.cursorobj.fetchall():
    print(record)
    obj= record['btnobject']
    # 替换原json.loads行
    detailsdict[obj] = ast.literal_eval(record['details'])

永久修复方案(推荐)

修正数据写入逻辑,写入details字段前先将字典转为标准JSON串再入库:

# 写入数据前处理
import json
details_json = json.dumps(你的details字典变量)
# 再将details_json写入数据库对应字段

修正后新入库的数据即可正常使用json.loads解析,你也可以批量把现有库中存量的单引号格式数据替换为标准JSON格式,彻底消除兼容隐患。


内容的提问来源于stack exchange,提问作者Veeraja Veeraesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:45:00