求助:如何将CSV中JSON字段展平为指定列?已试json_normalize等无效
解决JSON展平并生成指定结构化列的问题
核心思路
直接针对你需要的目标字段精准提取嵌套JSON中的值,避免json_normalize默认自动展开导致的结构混乱。以下是适配你需求的具体实现步骤:
步骤1:导入依赖库
import pandas as pd import json
步骤2:加载JSON数据
替换成你的JSON数据源(文件/API返回的变量均可):
# 从文件加载示例,若为内存中的JSON对象直接使用即可 with open('your_json_file.json', 'r') as f: json_data = json.load(f)
步骤3:定义字段提取规则
对应你期望的列结构,明确每个目标字段的JSON路径:
# 键为最终列名(支持多级表头拆分),值为提取对应JSON字段的逻辑 field_rules = { 'info.version': lambda x: x.get('info', {}).get('version'), 'paths.modified': lambda x: x.get('paths', {}).get('modified'), 'endpoints.added': lambda x: x.get('endpoints', {}).get('added'), 'components.schemas:added': lambda x: x.get('components', {}).get('schemas', {}).get('added'), 'components.requestBodies:added': lambda x: x.get('components', {}).get('requestBodies', {}).get('added') }
步骤4:生成目标DataFrame
单条JSON记录场景
result = {} for col_name, extract_func in field_rules.items(): result[col_name] = [extract_func(json_data)] # 转换为多级表头的DataFrame,匹配你期望的格式 df = pd.DataFrame(result) df.columns = pd.MultiIndex.from_tuples([col.split('.') for col in df.columns]) print(df)
多条JSON记录场景(如JSON数组)
result = {} for col_name, extract_func in field_rules.items(): result[col_name] = [extract_func(item) for item in json_data] df = pd.DataFrame(result) df.columns = pd.MultiIndex.from_tuples([col.split('.') for col in df.columns])
为什么之前的方法失效?
json_normalize默认会自动展开嵌套数组,若你的JSON是单条记录、或嵌套层级中存在非数组的复杂结构,默认参数会导致字段被错误展开或遗漏。上面的方法通过精准提取目标字段,完全匹配你需要的列结构,避免了自动展开带来的混乱。
内容的提问来源于stack exchange,提问作者Brie MerryWeather
相关产品推荐
相关产品推荐

