Python中嵌套JSON扁平化时出现RecursionError递归深度超限问题求助
错误原因
输入JSON中的goal是包含2个元素的列表,而你的convert_list_to_kv函数仅处理长度为1的列表,无法将其扁平化。每次调用simplify_multy_nested_json_recur时,goal列表始终存在,导致函数无限递归调用自己,触发RecursionError。
修复方案
修改扁平化逻辑,让它能处理任意长度的列表,同时移除不必要的递归嵌套。以下是调整后的代码:
def flatten_json(obj, parent_key=""): """递归扁平化嵌套JSON,支持字典和任意长度的列表""" result = {} if isinstance(obj, dict): for key, value in obj.items(): new_key = f"{parent_key}_{key}" if parent_key else key result.update(flatten_json(value, new_key)) elif isinstance(obj, list): for idx, item in enumerate(obj): new_key = f"{parent_key}_{idx}" if parent_key else str(idx) result.update(flatten_json(item, new_key)) else: result[parent_key] = obj return result # 测试输入 input_json = { 'resourceType':'CP','id':'af160c6b', 'period':{'start':'1987-12-21T06:22:41-05:00'}, 'careTeam':[{'reference':'79a33a776b59'}], 'goal':[{'reference':'c14'},{'reference':'b88'}], 'activity':[{'detail':{'code':{'coding':[{'code':'160670007','display':'Diabetic diet'}],'text':'Diabetic diet'},'status':'in-progress'}}] } # 生成扁平化结果 flattened_data = flatten_json(input_json) print(flattened_data)
代码说明
- 合并原有的多个函数为单一的
flatten_json,直接处理所有嵌套结构:- 遇到列表时,用索引(如
goal_0、goal_1)作为键的后缀,将列表元素展开为独立键值对; - 递归处理嵌套字典,直到所有值都是非嵌套的基础类型;
- 彻底避免了原代码中因未处理长列表导致的无限递归问题。
- 遇到列表时,用索引(如
扁平化结果示例
处理后的数据可直接用于生成CSV:
{ 'resourceType': 'CP', 'id': 'af160c6b', 'period_start': '1987-12-21T06:22:41-05:00', 'careTeam_0_reference': '79a33a776b59', 'goal_0_reference': 'c14', 'goal_1_reference': 'b88', 'activity_0_detail_code_coding_0_code': '160670007', 'activity_0_detail_code_coding_0_display': 'Diabetic diet', 'activity_0_detail_code_text': 'Diabetic diet', 'activity_0_detail_status': 'in-progress' }
内容的提问来源于stack exchange,提问作者Kalpesh
相关产品推荐
相关产品推荐

