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

Python新手使用json.loads/json.load时遭遇解析错误求助

解决Python JSON解析的常见错误——从候选人数据生成案例说起

作为刚接触Python和开发的新手,你遇到的这三个JSON相关错误其实都是很典型的「混淆了Python对象和JSON格式」的问题,咱们一个个理清楚:

错误1:将candidateList转为字符串后用json.loads解析报错

json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

原因

你应该是直接用了str(candidateList)把Python字典转成字符串,但这个字符串是Python字典的字符串表示,不是标准JSON格式:

  • Python字典用单引号'包裹键值,而JSON要求必须用双引号"
  • 两者在布尔值、None等写法上也有差异

解决办法

要用json.dumps()把Python字典转换成标准JSON字符串,再用json.loads()解析:

# 把字典转成标准JSON字符串
json_str = json.dumps(candidateList, indent=4)
# 解析JSON字符串为Python字典
parsed_dict = json.loads(json_str)

错误2:尝试json.loads("candidateList")报错

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

原因

json.loads()的参数必须是合法的JSON格式字符串,而你传入的是字符串"candidateList"——这只是变量名的文本,根本不是JSON内容,解析器自然找不到合法的JSON值。

解决办法

要传入的是json.dumps()生成的JSON字符串,而不是变量名的字符串,参考上面的正确写法。

错误3:改用json.load加载字典报错

AttributeError: 'dict' object has no attribute 'read'

原因

json.load()的作用是从文件对象(或具备read()方法的类文件对象)中读取JSON内容,它接收的是文件对象,不是Python字典。你直接传字典的话,字典没有read()方法,所以报错。

解决办法

如果是要把字典写入文件再读取,用json.dump()(写文件)和json.load()(读文件)配合:

# 把字典写入JSON文件
with open('candidates.json', 'w') as f:
    json.dump(candidateList, f, indent=4)

# 从文件读取JSON内容为字典
with open('candidates.json', 'r') as f:
    loaded_dict = json.load(f)

如果只是在内存中转换字典和JSON字符串,用json.dumps()和json.loads()就足够了,不需要json.load()。

完整的正确流程示例

# 生成候选人数据字典
candidateList = calCan()

# 内存中转换:字典 ↔ JSON字符串
json_string = json.dumps(candidateList, indent=4)
print("生成的JSON字符串:")
print(json_string)

# 解析JSON字符串回到字典
parsed_data = json.loads(json_string)
print("\n解析后的Python字典:")
print(parsed_data)

# 持久化到文件并读取
with open('candidates_data.json', 'w') as outfile:
    json.dump(candidateList, outfile, indent=4)

with open('candidates_data.json', 'r') as infile:
    loaded_data = json.load(infile)
print("\n从文件加载的数据:")
print(loaded_data)

小补充

你生成的datetime.time对象转成字符串存储是没问题的,但之后如果要把解析后的字符串转回datetime.time对象,需要自己做字符串解析,比如:

from datetime import datetime

# 假设解析后的时间字符串是"09:32:00"
time_str = "09:32:00"
time_obj = datetime.strptime(time_str, "%H:%M:%S").time()

内容的提问来源于stack exchange,提问作者Gordon Rose

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:52:30