
本文详解如何在 python 中高效地将一个字典对象复制多次并构建成合法的 json 列表结构,适用于 api 请求构造、测试数据生成等场景,重点介绍列表推导式与 json 序列化的正确用法。
在构建 JSON 格式的数据(尤其是用于 HTTP 请求体或配置文件)时,常需将一个基础字典对象重复生成多份,并整体嵌入到某个键(如 "items")对应的列表中。常见误区是直接循环调用 json.dump() 多次写入文件——这会导致非法 JSON(多个独立对象连续输出,而非一个完整数组),且未构造出目标结构。
✅ 正确做法是:先构造 Python 列表,再统一序列化为 JSON。
假设原始字典为:
item_template = {
"text": "Hi",
"feedback": ""
}要生成含 5 个相同字典的列表,推荐使用列表推导式(简洁、高效、可读性强):
items_list = [item_template for _ in range(5)]
? 注意:使用 _ 作为循环变量名是 Python 社区约定,表示该变量不被实际使用;避免使用 dict 作为变量名(会覆盖内置 dict 类型,引发潜在问题)。
此时 items_list 的值为:
[
{"text": "Hi", "feedback": ""},
{"text": "Hi", "feedback": ""},
{"text": "Hi", "feedback": ""},
{"text": "Hi", "feedback": ""},
{"text": "Hi", "feedback": ""}
]接着,将其嵌入顶层 JSON 结构(例如 "items" 字段):
import json
payload = {"items": items_list}
# 写入文件(确保生成合法 JSON)
with open("output.json", "w", encoding="utf-8") as f:
json.dump(payload, f, indent=2) # indent=2 提升可读性输出文件 output.json 将严格符合预期格式:
{
"items": [
{
"text": "Hi",
"feedback": ""
},
{
"text": "Hi",
"feedback": ""
},
{
"text": "Hi",
"feedback": ""
},
{
"text": "Hi",
"feedback": ""
},
{
"text": "Hi",
"feedback": ""
}
]
}⚠️ 关键注意事项:
- ❌ 不要对同一文件对象多次调用 json.dump() —— 它会写入多个独立 JSON 值(如 {}``{}``{}),违反 JSON 规范(合法 JSON 文档必须且仅能有一个根值);
- ✅ 若需动态修改字典内容(如每项 text 带序号),可在推导式中内联逻辑:
items_list = [{"text": f"Hi #{i+1}", "feedback": ""} for i in range(5)] - ✅ 如需深拷贝(避免引用共享导致意外修改),可结合 copy.deepcopy():
import copy items_list = [copy.deepcopy(item_template) for _ in range(5)]
总结:构建重复 JSON 列表的核心是「先组装 Python 数据结构,后统一序列化」。列表推导式是最 Pythonic、最安全的实现方式,兼顾性能、可维护性与语义清晰度。









