Python如何将循环生成的多组字典列表导出到同一JSON文件
问题原因
你当前的导出逻辑存在两个核心问题,导致仅能保留单个字典内容:
- 写文件代码放在循环内部,每次以
w(覆盖写)模式打开文件,会直接清空上一次循环写入的内容 - 每次循环都直接给
end_result["Services"]赋值,会覆盖之前存储的service字典列表
解决方案
最优方案是先在循环中收集所有生成的service字典,等全部循环执行完成后,一次性组装为目标结构写入JSON文件,既保证结构正确,也减少不必要的IO操作。
完整示例代码
import json # 循环启动前初始化空列表,存储所有生成的service字典 all_services = [] # 替换为你原本的大循环逻辑 for item in your_loop_iterator: # 这里是你原有的单个service字典生成逻辑 current_service = { "Name": f"Service{item}", "Products": { # 你的产品属性生成逻辑 "product1": "yes", "product2": "no" } } # 将生成的单个service加入总列表 all_services.append(current_service) # 所有循环结束后,统一组装为目标结构写入文件 end_result = {"Services": all_services} with open("json_test.json", "w", encoding="utf-8") as outputfile: # 加ensure_ascii=False避免中文被转义,不需要可以移除 json.dump(end_result, outputfile, indent=4, ensure_ascii=False)
特殊场景适配
如果你的数据量极大,内存无法一次性存储所有service字典,可以选择生成JSON Lines格式(每行一个独立JSON对象),适合增量写入:
# 循环内部每次生成service后直接追加写入 with open("json_test.jsonl", "a", encoding="utf-8") as outputfile: outputfile.write(json.dumps(current_service, ensure_ascii=False) + "\n")
内容的提问来源于stack exchange,提问作者Almosino
相关产品推荐
相关产品推荐

