如何解析大型JSON文件:将x值取整并对重复x值的y值求平均
Python处理JSON数据:x值取整并合并重复x的y值平均值
实现思路
- 读取原始JSON文件并解析为Python字典
- 遍历
DATA1中的每个数据项,将x值四舍五入到最近整数 - 用字典分组存储:以四舍五入后的
x为键,收集对应所有y值,同时保留z值(示例中z均为null,这里取同组第一个条目z值) - 遍历分组结果,计算每组
y值的平均值,生成新的数据条目 - 将处理后的数据写入新的JSON文件
完整代码实现
import json def process_json(input_path, output_path): # 读取原始JSON文件 with open(input_path, 'r', encoding='utf-8') as f: data = json.load(f) # 用于分组存储的字典,键为取整后的x值 grouped_data = {} for item in data['DATA1']: # 四舍五入x到最近整数,转成float保持和示例一致的格式(如1.0而非1) rounded_x = round(item['x']) rounded_x = float(rounded_x) # 分组逻辑:存在则追加y值,不存在则初始化 if rounded_x in grouped_data: grouped_data[rounded_x]['y_list'].append(item['y']) else: grouped_data[rounded_x] = { 'y_list': [item['y']], 'z_val': item['z'] } # 生成处理后的最终数据列表 processed_result = [] for x_val, info in grouped_data.items(): avg_y = sum(info['y_list']) / len(info['y_list']) processed_result.append({ 'x': x_val, 'y': avg_y, 'z': info['z_val'] }) # 写入新JSON文件 with open(output_path, 'w', encoding='utf-8') as f: json.dump({'DATA1': processed_result}, f, indent=2) # 调用函数处理文件 process_json('original.json', 'new.json')
关键细节说明
- x值格式统一:用
round()完成四舍五入后转成float,保证输出和示例一致(如1.0而非整数1) - 高效分组:字典的O(1)查找特性避免了嵌套循环,适合处理大型JSON数据
- y值平均计算:直接用
sum()和len()计算平均值,简洁高效 - z值处理:默认取同组第一个条目的
z值,若你的场景中同组z值可能不同,可根据需求调整(比如统一设为null或取最后一个条目值)
注意事项
- 原始示例JSON存在语法错误(最后一个条目后多了逗号),实际使用时需要修正,否则
json.load()会抛出解析错误 - 如果处理超大型JSON(内存无法一次性加载),可以改用
ijson库进行流式解析,避免内存溢出
内容的提问来源于stack exchange,提问作者gennz
相关产品推荐
相关产品推荐

