You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas规范化嵌套JSON:展平嵌套字典与列表

解决JSON展平与父子记录关联的问题

你的问题出在分别对父数据独立拆分tests和testRuns后直接拼接,导致父记录没有随子记录复制,最终出现大量N/A。正确的做法是逐层关联合并:先将父记录与tests子记录绑定,再将绑定后的记录与testRuns子记录绑定,确保每一条子记录都能关联到完整的父记录。

最优实现代码

import pandas as pd

# 提取核心结果数据
results = response['data']['getTestExecutions']['results']

# 1. 归一化父级数据,展开jira等嵌套字段,保留tests和testRuns的嵌套结果
df_parent = pd.json_normalize(results)

# 2. 关联父记录与tests子记录
# 炸开tests.results,父记录自动复制对应条数
df_with_tests = df_parent.explode('tests.results', ignore_index=True)
# 归一化tests子字段并添加前缀,合并到父记录
df_tests_norm = pd.json_normalize(df_with_tests['tests.results']).add_prefix('test.')
df_with_tests = pd.concat([df_with_tests.drop('tests.results', axis=1), df_tests_norm], axis=1)

# 3. 关联已绑定tests的记录与testRuns子记录
# 炸开testRuns.results,每条test记录自动复制对应testRuns条数
df_final = df_with_tests.explode('testRuns.results', ignore_index=True)
# 归一化testRuns子字段并添加前缀,合并到最终表
df_testruns_norm = pd.json_normalize(df_final['testRuns.results']).add_prefix('testRuns.')
df_final = pd.concat([df_final.drop('testRuns.results', axis=1), df_testruns_norm], axis=1)

# 查看最终结果
print(df_final.columns)
print(df_final)

代码说明

  1. 父级归一化:通过pd.json_normalize直接展开父记录中的嵌套字段(如jira.key、jira.project.id等),同时保留tests.results和testRuns.results的嵌套结构用于后续拆分。
  2. 逐层炸开合并:
    • 先炸开tests.results,父记录会自动复制成与tests子记录数量一致的行,确保每条test都对应完整的父数据。
    • 再炸开testRuns.results,已绑定父+test的记录会再次复制,确保每条testRun都关联对应的父和test数据。
  3. 字段前缀区分:通过add_prefix给子字段添加前缀(test.、testRuns.),避免与父字段命名冲突。

效果验证

最终生成的df_final中,每一行都是父测试执行记录 + 单条test记录 + 单条testRun记录的完整组合,所有字段均无N/A值,且保留了原始JSON的所有键和层级顺序。

内容的提问来源于stack exchange,提问作者matzano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 19:53:17