我正在做我的第一个非凡的python项目。
我从API响应中加载了许多字典。我使用的SDK将API响应作为对象返回,该对象包括JSON响应结果作为对象属性的子集。我对所有JSON数据都不感兴趣,因此我创建的字典是JSON和结果对象中数据的子集。我知道我需要提前的对象路径并且它是持久的。这是我在python中编写的ETL(提取,转换,加载)过程的一部分。我要从许多对象中提取许多字段,并因此重复许多代码。我想让事情变得更清楚。
当前,这种情况(反复发生):
arrayObj = apiReponse.somearray
for obj in arrayObj:
my_dict = {
'id': obj.id,
'n_fields': obj.n_fields
'field': obj.field
}
somelist.append(my_dict)
for nestedobj in obj.moredata:
nested = {
'id': nestedobj.id,
'parentid': obj.id,
'anotherfield': nestedobj.next.field,
'andsoforth': nestedobj.otherattr
}
anotherlist.append(nested)
'''some more stuff'''
load_list_to_db(somelist)
load_list_to_db(nested)
有时对象字段嵌套,有时一个对象嵌套在另一个(nestedobj.next.field)中。我正在研究一对多关系,并将JSON展平为关系实体。再次,这很混乱。
我一直在想类似的东西:
arrayObj = apiReponse.somearray
for obj in arrayObj:
my_dict = mapping_function(obj,'type_of_object_name')
somelist.append(
# or even somelist.append(mapping_function(obj,'type_of_object_name'))
'''more stuff'''
load_list_to_db(somelist)
这是一种合理的方法吗?高/中级,我将如何实施?
更新:
我进行了编辑,试图进一步阐明我的问题。我知道我可以使用getattr()通过名称而不是路径来检索属性。我不知道是否可以使用getattr()作为路径。我发现this answer揭示了如何使用getattr()获取嵌套属性。但是,我仍然不确定我概述的方法是否有效,或者是否有更好的方法。