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

如何用Python标准化JSON文件的Teachers列表,无需指定Tid、Tname字段?

问题描述

示例文件:sample.json

{
   "school":[
      {
         "testId":123,
         "testName":"test1",
         "Teachers":[
            {
               "Tid":111,
               "Tname":"aaa"
            },
            {
               "Tid":222,
               "Tname":"bbb"
            },
            {
               "Tid":333,
               "Tname":"ccc"
            },
            {
               "Tid":444,
               "Tname":"ddd"
            }
         ],
         "location":"India"
      }
   ]
}

现有代码

import json
import pandas as pd

with open('sample.json', 'r') as f:
    data = json.load(f)

df = pd.json_normalize(data, record_path='school', max_level=1)
df.to_csv("out.csv",index=False)

当前输出

当前生成的CSV里,Teachers列是一整串嵌套的JSON列表,其他列是testId、testName、location的单值内容,没有把教师信息展开成单独行。

期望输出

希望把每个教师的信息单独占一行,同时保留学校相关的字段,最终格式如下:

testIdtestNamelocationTidTname
123test1India111aaa
123test1India222bbb
123test1India333ccc
123test1India444ddd

关键要求:不需要手动传入"Tid"和"Tname"这类字段名,实现自动展开。

提问

能不能做到不指定"Tid"和"Tname"的前提下,得到上述期望的输出?


解决方案

可以实现,而且完全不需要硬编码任何字段名(包括教师和学校层级的字段),代码如下:

import json
import pandas as pd

with open('sample.json', 'r') as f:
    data = json.load(f)

# 自动获取学校层级除Teachers外的所有字段
school_fields = [key for key in data['school'][0].keys() if key != 'Teachers']
# 转换为json_normalize需要的meta路径格式
meta_paths = [['school', field] for field in school_fields]

# 展开Teachers列表,同时关联学校层级的所有字段
df = pd.json_normalize(
    data,
    record_path=['school', 'Teachers'],
    meta=meta_paths
)

# 清理列名,去掉自动生成的"school."前缀
df.columns = [col.split('.')[-1] for col in df.columns]

df.to_csv("out.csv", index=False)

代码说明

  1. 自动识别字段:通过遍历school下的第一个对象,排除Teachers后得到所有学校字段,避免硬编码;
  2. 正确展开嵌套:record_path直接定位到Teachers列表,将每个教师对象拆成单独行;
  3. 关联上层字段:meta参数自动把学校字段的值对应到每一行教师记录;
  4. 列名清理:把json_normalize自动生成的school.testId这类列名简化成testId,符合期望格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:52:51