如何访问已转为dataclass_json格式的data_args数据并二次处理?
解决dataclass_json嵌套数据访问问题
你访问嵌套数据的方式错了,核心原因是:data_args里的test对应的是TestMetaData类的实例,不是普通字典,不能直接用data_args['edit_meta']这种字典键的方式访问。正确的访问路径分两种:
方式一:直接操作dataclass实例(推荐)
dataclass实例的属性是通过**点号(.)**访问的,按照你的数据结构,正确的访问逻辑如下:
# 先取出TestMetaData实例 test_meta_instance = data_args['test'] # 访问edit_meta(MetaData类的实例) edit_meta = test_meta_instance.edit_meta # 访问list_meta(MetaDataList实例的列表) list_meta = edit_meta.list_meta # 遍历处理每个MetaDataList实例 for meta_item in list_meta: # 获取name字段 print(meta_item.name) # 遍历处理fields里的MetaDataFields实例 for field in meta_item.fields: # 获取label和name print(field.label, field.name)
方式二:转成字典后再操作
如果你习惯用字典的键值方式访问,可以调用dataclass_json提供的to_dict()方法,把dataclass实例转换成普通字典:
# 将TestMetaData实例转为字典 test_meta_dict = data_args['test'].to_dict() # 用字典键访问嵌套内容 edit_meta_dict = test_meta_dict['edit_meta'] list_meta_dict = edit_meta_dict['list_meta'] # 按字典逻辑处理数据 for meta_item_dict in list_meta_dict: print(meta_item_dict['name']) for field_dict in meta_item_dict['fields']: print(field_dict['label'], field_dict['name'])
注意:你的MetaDataFields类没有加@dataclass和@dataclass_json装饰器,只要它是正常实例化的类对象,依然可以用点号访问属性;如果需要将它也序列化成字典,建议给它补上装饰器。
内容的提问来源于stack exchange,提问作者user1897151
相关产品推荐
相关产品推荐

