如何使用pandas读取JSON文件并生成指定列格式的DataFrame
解决方案
核心问题说明:原有代码直接对根层级的字典做标准化处理,根节点的键(如getYearsListOverview)会被自动作为列名前缀,嵌套层级的字段也会携带父级前缀,只需调整数据处理逻辑即可。
方法1:无需修改JSON结构,仅调整代码
完整可运行代码如下:
import pandas as pd import json import os # 读取JSON文件 with open(os.path.join(filepath, json_file), 'r', encoding='utf-8') as f: j_f = json.load(f) processed_list = [] for item in j_f.values(): # 将sp_input_params下的字段提取到首层 item.update(item.pop('sp_input_params', {})) # 将customised_response_template下的字段提取到首层 item.update(item.pop('customised_response_template', {})) processed_list.append(item) # 生成DataFrame df = pd.DataFrame(processed_list) # 可选:严格过滤出要求的列,排除多余字段 required_cols = [ 'sp_name', 'req_url_query_params', 'req_body_params', 'sp_output_datasets', 'number_of_output_datasets_for_customized_template', 'performance_value_list', 'rankings_table', 'level_values', 'page_name' ] df = df[required_cols]
方法2:修改JSON结构简化处理
如果允许调整JSON结构,可以直接把外层字典改为数组,同时把嵌套的sp_input_params、customised_response_template字段拆到每个对象的首层,修改后结构参考:
[ { "sp_name": "analytics.year_overview_drop_down", "req_url_query_params": [], "req_body_params": [], "sp_output_datasets": [], "page_name": "home" }, { "sp_name": "analytics.get_performance_ranking_data", "req_url_query_params": [["@scroll_index", "index"]], "req_body_params": [["@event_type_id", "event_type_id"],["@season", "season"],["@athlete_guid", "athlete_guid"]], "sp_output_datasets": [], "number_of_output_datasets_for_customized_template": 4, "performance_value_list": [], "rankings_table": [], "level_values": [], "page_name": "performancereport" } ]
修改后处理代码可简化为:
with open(os.path.join(filepath, json_file), 'r', encoding='utf-8') as f: j_f = json.load(f) df = pd.DataFrame(j_f)
内容的提问来源于stack exchange,提问作者pythondumb
相关产品推荐
相关产品推荐

