如何用Python将嵌套JSON中dependency的'-'替换为CSV对应值?
解决方案
以下是可直接运行的Python代码,基于标准库实现需求:
import json import csv # 1. 读取CSV中的dependency列数据 dependency_values = [] with open('statistics.csv', 'r', encoding='utf-8') as csv_file: # 使用DictReader按列名读取,需确保CSV表头包含'dependency' csv_reader = csv.DictReader(csv_file) for row in csv_reader: # 收集每一行的dependency值 dependency_values.append(row['dependency']) # 2. 读取JSON文件并修改指定字段 with open('info.json', 'r', encoding='utf-8') as json_file: json_data = json.load(json_file) # 遍历jobs数组,逐个替换dependency值 for index, job_item in enumerate(json_data['jobs']): if index < len(dependency_values): # 替换attributes下的dependency字段 job_item['attributes']['dependency'] = dependency_values[index] else: # 处理CSV数据不足的情况,可根据需求调整逻辑 print(f"注意:CSV仅提供{len(dependency_values)}个依赖值,第{index+1}个job未替换") # 3. 保存修改后的JSON文件 with open('updated_info.json', 'w', encoding='utf-8') as updated_json: # indent=2保证格式化输出,ensure_ascii=False避免中文转义 json.dump(json_data, updated_json, indent=2, ensure_ascii=False)
关键注意事项
- 路径校验:确保
info.json、statistics.csv与脚本在同一目录,或替换为绝对路径(如/home/user/load/statistics.csv) - 列名匹配:确认CSV表头的依赖列名为
dependency(大小写敏感),如果实际列名不同,需修改row['dependency']中的键名 - 结构匹配:保证JSON结构确实是顶层含
jobs数组,每个数组元素下有attributes字段,且attributes包含dependency键 - 数据一致性:如果CSV的行数与
jobs数组长度不匹配,代码会打印警告,可根据需求改为抛出异常或保留原'-'值
常见错误排查
如果之前的代码失效,大概率是以下原因:
- 未正确读取CSV表头,导致取到的是表头字符串而非实际数据
- JSON字段路径错误(如误写为
job['attribute']而非job['attributes']) - 修改后未将数据写入文件,仅在内存中修改
- 文件编码问题,未指定
encoding='utf-8'导致读取乱码
内容的提问来源于stack exchange,提问作者jojo
相关产品推荐
相关产品推荐

