如何用Python为每行行首添加逗号以修正格式错误的JSON文件
修复无逗号分隔多行JSON数组的Python实现方案
你最初的思路存在两个问题:一是给每一行都加逗号会导致最后一个对象后面多出来非法的尾逗号,二是你尝试给行尾加逗号反而会把逗号加到
]前面导致格式错误,调整为从第二行开始行首加逗号的逻辑可以避开这两个问题。
适配性更强的简洁实现
推荐用剥除外层括号再拼接的方案,不需要手动判断行号,适配绝大多数同类型损坏场景:
import json def fix_json(input_path, output_path): # 读取原始文件内容 with open(input_path, 'r', encoding='utf-8') as f: raw_content = f.read().strip() # 剥除外层数组的[],拆分所有对象行,过滤空行 raw_objects = [ obj.strip() for obj in raw_content.strip('[]').splitlines() if obj.strip() ] # 用逗号拼接所有对象,再套回数组括号 fixed_content = f"[{',\n'.join(raw_objects)}]" # 可选:校验JSON合法性 try: json.loads(fixed_content) except json.JSONDecodeError as e: print(f"修复失败,仍存在格式错误:{e}") return False # 写入修复后的文件 with open(output_path, 'w', encoding='utf-8') as f: f.write(fixed_content) return True # 调用示例 fix_json("broken.json", "fixed.json")
逐行处理的实现方案
如果你需要严格按逐行加逗号的逻辑实现,可以用以下版本:
def fix_json_line_by_line(input_path, output_path): with open(input_path, 'r', encoding='utf-8') as f: # 读取所有非空行 lines = [line.rstrip('\n') for line in f if line.strip()] fixed_lines = [] for idx, line in enumerate(lines): # 第一行保留,不需要加逗号 if idx == 0: fixed_lines.append(line) # 后续所有行行首加逗号 else: fixed_lines.append(f",{line}") fixed_content = '\n'.join(fixed_lines) # 后续校验、写入逻辑和上面的方案一致
内容的提问来源于stack exchange,提问作者TheNewBadger
相关产品推荐
相关产品推荐

