You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何通过读取sys.argv输入高效生成多个JSON payload

解决方法

你需要的核心内置函数是zip(),它可以将多个可迭代对象按索引位置一一配对,刚好匹配你需要的「取每个列表相同索引元素组成一组」的需求。

你原有代码的核心问题有两个:

  • 嵌套循环逻辑错误,会把每个列表的每个值依次覆盖三个字段,最终只会得到最后一组的最后一个值的错误结果
  • 没有处理命令行参数里被shell保留的单引号,会导致生成的payload带多余符号

以下是修正后的完整代码:

import json
import sys

def prepare_payload():
    with open("rabbitmq_payload.json") as fh:
        # 加载基础payload模板
        base_payload = json.load(fh)
    return base_payload

if __name__ == "__main__":
    # 解析命令行参数,去掉括号、多余单引号,拆分得到三个独立列表
    billing_accounts = [s.strip("'") for s in sys.argv[1].strip('[]').split(',')]
    vcenter_urls = [s.strip("'") for s in sys.argv[2].strip('[]').split(',')]
    cred_headers = [s.strip("'") for s in sys.argv[3].strip('[]').split(',')]
    
    base_data = prepare_payload()
    all_payloads = []
    
    # 用zip按索引配对三个列表的元素
    for account, url, cred in zip(billing_accounts, vcenter_urls, cred_headers):
        # 每次复制模板生成新字典,避免修改同一个对象导致值覆盖
        current_payload = base_data.copy()
        current_payload["billing_account_number"] = account
        current_payload["vcenter_url"] = url
        current_payload["cred_header"] = cred
        all_payloads.append(current_payload)
        # 直接打印符合预期格式的结果
        print(json.dumps(current_payload, indent=4))
        print()

    # 如果需要把所有payload写入文件,可开启以下代码
    # with open("output_payloads.json", "w") as f:
    #     json.dump(all_payloads, f, indent=4)

关键点说明

  • zip()是Python原生内置函数,无需额外安装依赖,三个输入列表长度一致的场景下,会依次返回(billing_accounts[0], vcenter_urls[0], cred_headers[0])、(billing_accounts[1], vcenter_urls[1], cred_headers[1])格式的元组,完全匹配你的需求
  • 每次赋值前调用base_data.copy()是因为Python字典是可变对象,直接修改会覆盖上一次的赋值结果

内容的提问来源于stack exchange,提问作者kishore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 17:36:04