
本文介绍如何高效地将一个字典对象重复生成 n 次,并构造成符合 json 格式的列表结构,适用于 api 请求体构造、测试数据生成等场景。
在实际开发中(尤其是构建 REST API 请求体或生成测试用 JSON 数据时),我们常需将一个基础字典对象复制多次并组成列表。例如,原始结构仅含一个 item:
"items": [
{
"text": "Hi",
"feedback": ""
}
]但目标是将其扩展为包含 5 个完全相同对象的列表:
"items": [
{ "text": "Hi", "feedback": "" },
{ "text": "Hi", "feedback": "" },
{ "text": "Hi", "feedback": "" },
{ "text": "Hi", "feedback": "" },
{ "text": "Hi", "feedback": "" }
]✅ 正确做法是:先构造 Python 列表,再统一序列化为 JSON,而非在循环中多次调用 json.dump()(这会导致格式错误,如缺失逗号、括号不匹配、非标准 JSON 流)。
✅ 推荐实现方式(简洁、安全、符合 JSON 规范)
import json
# 基础字典(注意:避免使用内置名 dict 作为变量名)
item_template = {
"text": "Hi",
"feedback": ""
}
# 生成包含 5 个相同字典的列表(推荐:列表推导式)
items_list = [item_template for _ in range(5)]
# 构建完整 JSON 对象
payload = {"items": items_list}
# 写入文件(确保格式化输出,便于阅读和调试)
with open("output.json", "w", encoding="utf-8") as f:
json.dump(payload, f, indent=2)
# 或直接获取字符串用于 API 请求
json_str = json.dumps(payload, indent=2)
print(json_str)⚠️ 注意事项
- ❌ 不要重写 dict 作为变量名(它是 Python 内置类型),应使用 item_template、base_item 等语义化名称;
- ❌ 避免在循环中对同一文件多次 json.dump() —— 这会输出非法 JSON(如连续多个 {} 无分隔),且无法被标准解析器识别;
- ✅ 若需深拷贝(即每个字典独立可修改),请使用 copy.deepcopy(),因为上述列表推导式中所有元素引用同一字典对象:
import copy items_list = [copy.deepcopy(item_template) for _ in range(5)]
- ✅ 如需动态填充不同值(如带序号的文本),可扩展推导式:
items_list = [{"text": f"Hi #{i+1}", "feedback": ""} for i in range(5)]
✅ 总结
核心要点是:数据构造与序列化分离。先用列表推导式 [obj for _ in range(n)] 高效生成重复结构,再通过 json.dumps() 或 json.dump() 一次性输出合法 JSON。这种方式语义清晰、性能优良,且完全兼容各类 JSON 解析器与 Web 框架。










