Python中如何用字典高效生成指定API JSON payload并写入文件?
如何将Python字典和列表转换为指定格式的API JSON Payload
核心方案:直接构造Python数据结构再序列化
不需要先写入文件再读取,直接在内存中构造符合要求的Python对象,再转成JSON字符串,这是最高效的方式,适合直接作为API请求的payload发送。
代码实现
import json # 你的原始数据 pn_and_mfgr_dict = {'SAMPLE-ITEM-1': 'SAMPLE-MANUFACTURER-1', 'SAMPLE-ITEM-2': 'SAMPLE-MANUFACTURER-2'} quantities = ["1","3"] poid = 22130 # 组装inventory列表 inventories = [] # 用zip匹配字典键值对和对应的数量(Python3.7+字典保留插入顺序) for (item, mfgr), qty in zip(pn_and_mfgr_dict.items(), quantities): inventories.append({ "item": item, "mfgr": mfgr, "quantity": qty, "condition": "REF" }) # 构造完整的payload结构 payload_structure = [ { "poid": str(poid), # 转为字符串匹配API要求的格式 "inventories": inventories } ] # 生成JSON字符串,直接用于API调用 payload_json = json.dumps(payload_structure, indent=2) # 可直接打印查看结果 print(payload_json) # 若需写入JSON文件,用json.dump更高效 with open('api_payload.json', 'w', encoding='utf-8') as f: json.dump(payload_structure, f, indent=2, ensure_ascii=False)
关键说明
- 顺序匹配:Python 3.7及以上版本的普通字典会保留键的插入顺序,因此
zip(pn_and_mfgr_dict.items(), quantities)能准确对应每个物料和其数量。如果使用Python3.6及以下版本,需要改用collections.OrderedDict存储pn_and_mfgr_dict来保证顺序。 - 类型匹配:API示例中
poid是字符串类型,所以需要将整数poid转为字符串,避免JSON序列化后出现数值类型不匹配的问题。 - 高效序列化:
- 直接生成JSON字符串:
json.dumps将Python对象转为字符串,可直接作为API请求的body发送,省去文件IO步骤,性能更优。 - 写入文件:使用
json.dump而非先转字符串再写入,因为json.dump会直接将对象序列化到文件流,减少内存占用,适合处理大数据量的情况。
- 直接生成JSON字符串:
关于原始数据存储的优化建议
当前的pn_and_mfgr_dict+quantities组合是可行的,但如果在生成数据的阶段,能直接将物料信息(item、mfgr、quantity)组装成列表字典(如下),会更直观,后续构造payload时也无需额外匹配:
# 优化后的原始数据结构示例 inventory_data = [ {"item": "SAMPLE-ITEM-1", "mfgr": "SAMPLE-MANUFACTURER-1", "quantity": "1"}, {"item": "SAMPLE-ITEM-2", "mfgr": "SAMPLE-MANUFACTURER-2", "quantity": "3"} ]
这种结构下,构造inventories只需给每个字典添加固定的"condition": "REF"即可,代码会更简洁。
内容的提问来源于stack exchange,提问作者Wes Graham
相关产品推荐
相关产品推荐

