如何将 JSON 中的单个字典项扩展为包含多个相同元素的列表

1次阅读

如何将 JSON 中的单个字典项扩展为包含多个相同元素的列表

本文介绍如何高效地将一个字典对象重复生成 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 框架。

text=ZqhQzanResources