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

如何使用Python计算JSON文件中的数值平均值

用Python计算JSON文件中数值平均值的实现方案

你提供的JSON片段属于不完整结构,合法的完整JSON需要用大括号包裹根级的items数组,且所有数值字段(start/end/conf)当前存储为字符串格式,计算前需要先转为浮点型。以下方案全程使用Python内置标准库,无需额外安装第三方依赖。

实现思路

  • 加载解析内容:使用内置json模块读取本地JSON文件/解析JSON字符串,转换为Python可操作的字典结构
  • 逐层遍历取值:先遍历外层items数组提取条目级的start、end字段,再遍历每个条目下嵌套的alter子数组提取conf字段
  • 异常兼容处理:将字符串格式的数值转为float类型,遇到字段缺失、值无法转为合法数值的脏数据直接跳过,避免程序中断
  • 平均值计算:对收集到的所有有效数值求和后除以总个数,无有效数值时直接返回0,规避除零报错

完整实现代码

import json
from typing import List

def calc_json_numeric_avg(json_source: str, target_fields: List[str] = None, is_file: bool = True) -> float:
    # 默认计算start、end、conf三个字段的总平均值,可通过target_fields自定义要计算的字段
    if target_fields is None:
        target_fields = ["start", "end", "conf"]
    all_valid_values = []

    # 支持读取本地文件 或 直接解析JSON字符串
    if is_file:
        with open(json_source, 'r', encoding='utf-8') as f:
            data = json.load(f)
    else:
        data = json.loads(json_source)
    
    # 遍历items数组
    for item in data.get("items", []):
        # 提取item层级的start、end字段
        for field in ["start", "end"]:
            if field in target_fields and field in item:
                try:
                    all_valid_values.append(float(item[field]))
                except (ValueError, TypeError):
                    continue
        # 提取嵌套在alter数组下的conf字段
        if "conf" in target_fields:
            for alter_item in item.get("alter", []):
                if "conf" in alter_item:
                    try:
                        all_valid_values.append(float(alter_item["conf"]))
                    except (ValueError, TypeError):
                        continue
    
    # 无有效数值时直接返回0
    if not all_valid_values:
        return 0.0
    return sum(all_valid_values) / len(all_valid_values)

# 调用示例
if __name__ == "__main__":
    # 计算本地JSON文件的平均值
    avg_result = calc_json_numeric_avg("your_file_path.json")
    print(f"目标字段数值平均值: {avg_result:.2f}")

    # 如果要解析JSON字符串而非文件,按如下方式调用
    # test_json_str = '{"items": [{"start": "0.6", "end": "0.9", "alter": [{"conf": "0.6", "content": ""}], "type": "pron"}]}'
    # avg_result = calc_json_numeric_avg(test_json_str, is_file=False)

使用说明

  • 计算本地文件时,把your_file_path.json替换为实际的JSON文件存储路径即可
  • 若只需要计算单个字段的平均值,比如单独统计conf字段的平均,调用时传入参数target_fields=["conf"]即可
  • 要确保待处理的JSON是合法格式,根结构必须是包裹items数组的对象,即完整结构为{"items": [数组内容]},否则会触发解析错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:03:55