
本文详解如何在构造 JSON 字符串时确保数值型字段(如 sourceTimestamp)以原生整数形式而非字符串形式传递,避免因类型不匹配导致 API 调用失败。
本文详解如何在构造 json 字符串时确保数值型字段(如 `sourcetimestamp`)以原生整数形式而非字符串形式传递,避免因类型不匹配导致 api 调用失败。
在 Python 中通过字符串拼接方式构建 JSON 负载(如 Payload = '[{...}]')虽可行,但极易引发类型错误——尤其是当 API 严格校验字段类型时。您当前的问题正源于此:"sourceTimestamp":"1715234890" 是字符串字面量(被双引号包裹),而目标 API 现在要求其为纯整数 1715234890(无引号)。
✅ 正确做法是:移除该字段值两侧的双引号,并确保其在 JSON 字符串中作为裸数字出现。
修改前(错误):
"sourceTimestamp":"'+ str(int(currentTime.timestamp())) +'"
→ 生成 "sourceTimestamp":"1715234890"(字符串)
修改后(正确):
"sourceTimestamp":'+ str(int(currentTime.timestamp())) +'
→ 生成 "sourceTimestamp":1715234890(整数)
立即学习“Python免费学习笔记(深入)”;
完整修正后的 Payload 示例:
Payload = '[{"Code": "'+someCode+'", "version": "v1", "itemNumber": 1, "referenceId": "'+referenceId+'", "alertBody": {"customerId": "'+customerId+'"}, "Context": {"Id":"'+str(payload['body']['State']['Id'])+'", "Name":"Payment", "Expiration":0, "Action":"", "sourceTimestamp":'+ str(int(currentTime.timestamp())) +', "sourceApp":"someApp"}}]'⚠️ 重要注意事项:
- 不要对数字加引号:JSON 规范中,123 是整数,"123" 是字符串;类型必须严格匹配 API Schema。
-
避免手动拼接 JSON:强烈建议改用 json.dumps() 构建结构化负载,既安全又可读。例如:
import json payload_dict = [{ "Code": someCode, "version": "v1", "itemNumber": 1, "referenceId": referenceId, "alertBody": {"customerId": customerId}, "Context": { "Id": str(payload['body']['State']['Id']), "Name": "Payment", "Expiration": 0, "Action": "", "sourceTimestamp": int(currentTime.timestamp()), # ← 天然整数,无需 str() "sourceApp": "someApp" } }] Payload = json.dumps(payload_dict)此方式自动处理转义、类型序列化与格式验证,从根本上规避字符串拼接风险。
? 总结:修复核心在于理解 JSON 字面量语法——数值不加引号;长远来看,弃用字符串拼接、拥抱 json.dumps() 是提升代码健壮性与可维护性的最佳实践。


















