如何将JSON Array转换为对应自定义Task类实例的Python列表
Python实现JSON数组转自定义Task类实例列表
基础实现方案(无第三方依赖)
首先先定义你的Task类,之后遍历JSON对应的Python字典列表,逐个实例化即可:
from datetime import datetime import json # 1. 自定义Task类 class Task: def __init__(self, completed: int, content: str, deadline: str, id: int, user_id: int): self.completed = completed self.content = content # 可选:将字符串格式的截止时间转换为datetime对象,方便后续时间计算 self.deadline = datetime.strptime(deadline, "%a, %d %b %Y %H:%M:%S %Z") self.id = id self.user_id = user_id # 可选:自定义打印格式,方便调试查看实例内容 def __repr__(self): return f"Task(id={self.id}, content='{self.content}', completed={self.completed})" # 2. 加载JSON数据(如果是已经解析好的Python字典列表可以跳过这步) # 假设你的JSON字符串存在变量json_str中 json_data = json.loads(json_str) # 3. 批量转换为Task实例列表 task_list = [Task(**item) for item in json_data]
这里的**item是字典解包语法,只要JSON字典的键名和Task类__init__的参数名完全对应,就可以直接用这个语法简化代码。如果键名不匹配,手动逐个映射参数即可,示例:Task(content=item['task_content'], completed=item['is_done'])
简化实现方案(Python 3.7+,用dataclass)
如果不想手动写冗长的__init__方法,可以用Python标准库的dataclasses模块简化类定义:
from dataclasses import dataclass from datetime import datetime import json @dataclass class Task: completed: int content: str deadline: datetime | str id: int user_id: int # 加载JSON数据 json_data = json.loads(json_str) # 转换逻辑不变,如果需要统一转换时间格式可以提前处理字段 task_list = [] for item in json_data: # 转换截止时间为datetime对象,不需要可以删掉这行 item['deadline'] = datetime.strptime(item['deadline'], "%a, %d %b %Y %H:%M:%S %Z") task_list.append(Task(**item))
常见问题处理
- 如果JSON字典包含多余字段,解包会报错,可以提前过滤需要的键:
# 只保留Task类需要的字段 required_keys = {"completed", "content", "deadline", "id", "user_id"} task_list = [Task(**{k:v for k,v in item.items() if k in required_keys}) for item in json_data]
- 如果部分字段可能缺失,可以给Task类的参数设置默认值,避免初始化报错。
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

