使用Python 3.7合并多个JSON文件时格式保留问题求助
合并多个JSON文件并保留格式的解决方案
问题分析
你的代码只是简单拼接所有JSON文件的文本内容,会导致两个核心问题:
- 生成的文件不是合法JSON(除非每个原文件都是同一数组的片段),无法被JSON解析工具正常读取;
- 若原文件末尾无换行,多个文件的内容会直接连在一起,导致所有内容挤在同一行。
解决方案
方案1:生成合法格式化的JSON数组(推荐)
这个方法会将每个JSON文件的内容解析为Python对象,合并成一个数组后,再以格式化的方式写入新文件,既保证JSON合法性,又保留清晰的排版:
import glob import json merged_data = [] for file_path in glob.glob("*.json"): with open(file_path, "r", encoding='utf-8') as infile: # 解析单个JSON文件内容 json_content = json.load(infile) merged_data.append(json_content) # 写入合并后的文件,indent参数控制缩进,ensure_ascii=False保留中文 with open("merged_file.json", "w", encoding='utf-8') as outfile: json.dump(merged_data, outfile, ensure_ascii=False, indent=4)
- 效果:每个原JSON的内容会作为数组的一个元素,以缩进4格的格式排版,每个元素独立成行,结构清晰且符合JSON规范。
方案2:原样拼接文本(仅用于查看内容,不保证JSON合法性)
如果只是需要将每个文件的内容原样拼接,保留原文件的换行格式,可在每个文件内容后添加换行/空行分隔:
import glob content_list = [] for file_path in glob.glob("*.json"): with open(file_path, "r", encoding='utf-8') as infile: content_list.append(infile.read()) # 添加空行分隔不同文件的内容,可根据需求调整 content_list.append("\n\n") with open("merged_file.json", "w", encoding='utf-8') as outfile: outfile.writelines(content_list)
- 注意:这种方式生成的文件如果每个原文件是独立的JSON对象/数组,整体会是非法JSON,仅适合人工查看内容的场景。
原代码问题说明
- 直接用
result += infile.read()拼接文本,若原文件末尾无换行,后续文件内容会直接衔接在上一个文件的最后一行,导致内容挤在一起; - 未处理JSON结构的合法性,拼接后的文本无法被JSON解析器识别。
内容的提问来源于stack exchange,提问作者rshar
相关产品推荐
相关产品推荐

