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

Python API请求JSON格式错误排查:recipient.state参数无效

问题根源:错误的JSON结构(数组 vs 对象)

我一眼就瞅出问题所在了!你的代码里sender和recipient字段用了数组(方括号[])来包裹信息,但API明确要求这两个字段是单个对象(大括号{})——这就是你收到Invalid parameter: recipient.state错误的核心原因。

具体对比:

你写的错误结构:

"recipient": [
    {"state": lstate},
    {"firstName": lfname},
    {"lastName": llname},
    ...
]

API期望的正确结构:

"recipient": {
    "state": "NY",
    "firstName": "Test",
    "lastName": "Dev",
    ...
}

API会直接在recipient对象下查找state字段,但你的代码里state藏在数组的第一个子对象里,API自然找不到,所以返回参数无效的错误。


修改后的代码

只需要把sender和recipient的方括号[]改成大括号{},并把所有字段合并到一个对象里:

@app.route('/printlab', methods=['POST']) 
def printlab(): 
    if request.method == 'POST': 
        lfname = request.form['first_name'] 
        llname = request.form['last_name'] 
        fullstate = request.form['state'] 
        lstate = us_state_abbrev.get(fullstate) 
        lcity = request.form['city'] 
        laddress = request.form['shipping_address'] 
        lzip = request.form['zip'] 
        llb = request.form['lbs'] 
        loz = request.form['ozs'] 
        lw = (int(llb)*16) 
        headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} 
        labela = { 
            "authToken": vipkey, 
            "labelType": "domestic", 
            "mailClass": "MediaMail", 
            "weightOz": lw, 
            "description": "Books and Comics", 
            "sender": {  # 替换为大括号,合并所有字段
                "firstName": sfname,
                "lastName": slname,
                "streetAddress": saddress,
                "city": scity,
                "state": sstate,
                "postalCode": spostcode
            }, 
            "recipient": {  # 替换为大括号,合并所有字段
                "state": lstate,
                "firstName": lfname,
                "lastName": llname,
                "streetAddress": laddress,
                "city": lcity,
                "postalCode": lzip
            } 
        } 
        # 调试小技巧:打印格式化后的JSON,和API示例逐行对比
        print(json.dumps(labela, indent=2))
        r = requests.post(lurl, data=json.dumps(labela), headers=headers) 
        return r.text 
    else: 
        return """<html><body><h1>No Post data homeslice</h1></body></html>"""

额外调试建议

  • 用json.dumps(labela, indent=2)打印格式化后的JSON字符串,和API提供的示例逐行对比,能快速发现结构差异;
  • 可以把生成的JSON复制到JSON校验工具里(本地或在线工具均可),确认格式合法后再发送请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:34:43