python - 如何从python中的父/子继承json中检索数据?
问题描述
我调用了一个返回以下响应的 API。我正在努力使用它并访问所有孩子,因为所有孩子也可以成为父母。
响应来自以下层次结构:
[
{
"id": 459029874,
"name": "Data",
"children": []
},
{
"id":762606928,
"name":"Top 25 KPIs",
"children":[
{
"id":97002306,
"name":"KPI Definition",
"children":[]
},
{
"id":1178185669,
"name":"DEU",
"children":[
{
"id":146196511,
"name":"DEU Development Path",
"children":[]
}
]
}
]
}]
我试图得到以下结果,然后将其放入数据框中:
{"id": 459029874, "name": "Data", "parent_id": ""},
{"id": 762606928, "name": "Top 25 KPIs", "parent_id": ""},
{"id": 97002306, "name": "KPI Definition", "parent_id": "762606928"},
{"id": 1178185669, "name": "DEU", "parent_id": "762606928"},
{"id": 146196511, "name": "DEU Development Path", "parent_id": "1178185669"}
等等……
解决方案
对于这些类型的问题,创建一个生成器是很方便的,它yield
是结果,然后yields from
孩子们递归地将孩子们传递回生成器。它提供了非常简洁的解决方案:
def flatten(l, parent = ''):
for item in l:
yield {'id': item['id'], 'name': item['name'], "parent_id": parent }
yield from flatten(item['children'], item['id'])
list(flatten(data))
结果:
[{'id': 459029874, 'name': 'Data', 'parent_id': ''},
{'id': 762606928, 'name': 'Top 25 KPIs', 'parent_id': ''},
{'id': 97002306, 'name': 'KPI Definition', 'parent_id': 762606928},
{'id': 1178185669, 'name': 'DEU', 'parent_id': 762606928},
{'id': 146196511, 'name': 'DEU Development Path', 'parent_id': 1178185669}]
推荐阅读
- javascript - 如何修复提交按钮激活错误?
- java - springboot可以将组件初始化为线程吗?
- c# - Excel文件导出没有任何错误
- javascript - Firefox 下载标签超链接不起作用
- python - Python threading.Condition.notify_all() 未触发下一个线程
- node.js - 无法使用 multer 获取临时文件路径
- javascript - 数据表按钮展开/折叠行 JQuery
- c++ - C++中读取txt数据,展开成行或列并排序
- swift - 如何修复“无法转换类型的值 '(CGFloat) -> 数据?' 此代码上的预期参数类型“数据”错误?
- xslt - XSL:选择父元素的全局变量