如何在Python中将三层嵌套JSON数组拆分为多条JSON记录?
实现三层嵌套JSON数组的全拆分
步骤说明
你需要逐层对嵌套数组使用explode,并在每一步展开嵌套的字段,最终拆分到最内层的answerOptions。以下是具体实现方案:
示例代码
假设你的JSON字符串已解析为Python字典data,替换成你的实际数据即可:
import pandas as pd import json # 示例JSON字符串(替换为你的真实数据) json_str = ''' { "questionGroups": [ { "groupId": "g1", "questions": [ { "questionId": "q1", "text": "问题1", "answerOptions": [{"optionId": "a1", "text": "选项1"}, {"optionId": "a2", "text": "选项2"}] }, { "questionId": "q2", "text": "问题2", "answerOptions": [{"optionId": "a3", "text": "选项3"}, {"optionId": "a4", "text": "选项4"}] } ] }, { "groupId": "g2", "questions": [ { "questionId": "q3", "text": "问题3", "answerOptions": [{"optionId": "a5", "text": "选项5"}, {"optionId": "a6", "text": "选项6"}] }, { "questionId": "q4", "text": "问题4", "answerOptions": [{"optionId": "a7", "text": "选项7"}, {"optionId": "a8", "text": "选项8"}] } ] } ] } ''' # 解析JSON为字典 data = json.loads(json_str) # 1. 加载最外层数据,得到包含questionGroups的DataFrame df = pd.json_normalize(data) # 2. 拆分第一层数组questionGroups df = df.explode('questionGroups').reset_index(drop=True) # 3. 展开questionGroups中的嵌套字段,保留questions列 df = pd.concat([df.drop('questionGroups', axis=1), df['questionGroups'].apply(pd.Series)], axis=1) # 4. 拆分第二层数组questions df = df.explode('questions').reset_index(drop=True) # 5. 展开questions中的嵌套字段,保留answerOptions列 df = pd.concat([df.drop('questions', axis=1), df['questions'].apply(pd.Series)], axis=1) # 6. 拆分第三层数组answerOptions df = df.explode('answerOptions').reset_index(drop=True) # 7. 展开answerOptions中的嵌套字段 df = pd.concat([df.drop('answerOptions', axis=1), df['answerOptions'].apply(pd.Series)], axis=1) # 查看最终结果(此时会生成8条目标记录) print(df)
关键注意点
- 每次
explode后用reset_index(drop=True)重置索引,避免后续操作出现索引混乱 - 通过
pd.concat+apply(pd.Series)将嵌套字典的键转为DataFrame的列,实现字段展开 - 严格按照从外到内的顺序拆分三层数组:
questionGroups→questions→answerOptions
内容的提问来源于stack exchange,提问作者Code
相关产品推荐
相关产品推荐

