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

Python处理IRIS文件报JSONDecodeError,如何提取指定字段导出CSV

问题诊断

你遇到的问题主要分为两类,对应解决方案如下:

  1. JSONDecodeError报错原因:你提供的示例JSON末尾缺少]}类的闭合符号,还存在末尾多余逗号的问题,这类半结构化导出的.iris文件大多存在JSON格式不规范的问题,直接用标准json库解析会失败
  2. 原有代码的问题:
  • 缩进错误:csv写入的上下文管理器提前结束,循环里调用writer时文件已经关闭,会触发IO错误
  • 仅能提取顶层字典的键,遇到嵌套字典里的同名字段没有处理逻辑,无法满足提取需求
修复后的实现代码
import csv
import json
from pathlib import Path

# 目标提取键
TARGET_KEYS = ("streamType", "uid", "enabled", "login", "name")

def parse_incomplete_json(file_content):
    """处理不规范的JSON内容,修复常见格式错误"""
    # 去除末尾空白和多余逗号
    content = file_content.strip().rstrip(',')
    # 自动补全缺失的闭合括号,直到JSON可以正常解析
    while True:
        try:
            return json.loads(content)
        except json.JSONDecodeError as e:
            if "Expecting '}" in e.msg or "Expecting value" in e.msg:
                content += '}'
            elif "Expecting ']" in e.msg:
                content += ']'
            else:
                # 其他格式错误抛出,由外层异常捕获处理
                raise

def extract_top_target_keys(data, target_keys):
    """优先提取顶层的目标键,不会被嵌套内的同名字段覆盖"""
    res = {}
    for k in target_keys:
        if k in data:
            res[k] = data[k]
    # 若需要提取所有层级的同名字段,可将此处修改为递归遍历逻辑
    return res

if __name__ == "__main__":
    # 替换为你的.iris文件所在的文件夹路径
    path = Path(r"替换为你的文件目录路径")
    with open(path / "result.csv", "w", newline="", encoding="utf-8-sig") as out_f:
        writer = csv.DictWriter(out_f, fieldnames=TARGET_KEYS, extrasaction='ignore')
        writer.writeheader()
        # 遍历所有.iris文件
        for file in path.glob("*.iris"):
            try:
                with open(file, encoding="utf-8") as inp_f:
                    file_content = inp_f.read()
                    data = parse_incomplete_json(file_content)
                row = extract_top_target_keys(data, TARGET_KEYS)
                writer.writerow(row)
                print(f"文件{file.name}处理完成")
            except Exception as e:
                print(f"文件{file.name}处理失败,错误信息:{str(e)}")
                continue
功能说明
  • 格式容错:针对不规范JSON做了预处理和自动补全逻辑,同时增加异常捕获,单个文件解析失败不会中断整个批量处理任务
  • 字段提取规则:默认优先提取顶层的目标字段,不会被global、grants等嵌套结构里的同名字段覆盖,可根据需求调整提取逻辑
  • 编码兼容:指定utf-8编码读写文件,避免中文乱码问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:06:03