如何在Python中为复杂JSON API Payload填充YAML数据?
解决YAML数据填充嵌套JSON模板的Python方案
核心思路
用Jinja2模板引擎处理JSON模板的占位符,它原生支持嵌套变量访问和数组循环渲染,能完美解决嵌套字典、数组结构的填充问题。
步骤1:改造JSON模板文件(json.txt)
把需要填充的位置改成Jinja2占位符格式:
- 嵌套字典变量用
{{ 父键.子键 }},比如{{ user.name }} - 数组循环用
{% for 元素 in 数组键 %}和{% endfor %}包裹对应结构,注意处理元素间的逗号分隔
示例json.txt内容:
{ "user": { "name": "{{ user.name }}", "age": {{ user.age }} }, "orders": [ {% for order in orders %} { "id": "{{ order.id }}", "amount": {{ order.amount }} }{% if not loop.last %},{% endif %} {% endfor %} ] }
步骤2:准备YAML数据文件(tdata.yml)
保持正常的YAML嵌套结构即可,示例:
user: name: "Alice" age: 30 orders: - id: "ORD001" amount: 199.99 - id: "ORD002" amount: 299.99
步骤3:编写Python代码
import yaml from jinja2 import Template import json # 加载YAML数据 with open('tdata.yml', 'r', encoding='utf-8') as f: data = yaml.safe_load(f) # 读取并渲染JSON模板 with open('json.txt', 'r', encoding='utf-8') as f: template = Template(f.read()) rendered_json = template.render(**data) # 可选:将渲染后的字符串转为JSON对象(用于后续API请求) final_payload = json.loads(rendered_json) # 输出结果 print(rendered_json)
说明
- Jinja2会自动处理嵌套字典的变量解析,循环语法能生成符合JSON格式的数组元素
- 如果不需要生成字符串,直接用
final_payload作为API请求的Payload即可
内容的提问来源于stack exchange,提问作者mac
相关产品推荐
相关产品推荐

