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
相关产品推荐
相关产品推荐

