我有解go server组json它收到它。当我使用 时它有效,curl但在 . 的情况下失败python。去服务器解组代码:type Data struct { Namespace string `json:"namespace"` ContainerId string `json:"containerId"`}func notify(w http.ResponseWriter, r *http.Request) { decoder := json.NewDecoder(r.Body) var data Data err := decoder.Decode(&data) if err != nil { glog.Errorf("Failed to decode the request json %s \n", err.Error()) return } ...}如果我执行 curl 命令,它会毫无怨言地工作:curl -i -H "Accept: application/json" -H "Content-Type:application/json" -X POST --data '{"namespace": "default", "containerId": "2f7c58d399f2dc35fa1be2abea19301c8e74973ddd72f55a778babf01db5ac26"}' http://mysvc:8080/notify但是如果我对它做同样的事情Python就会抱怨:jsonPrep['containerId'] = "2f7c58d399f2dc35fa1be2abea19301c8e74973ddd72f55a778babf01db5ac26"jsonPrep['namespace'] = "default" headers = {'Content-type': 'application/json', 'Accept': 'application/json'}r = requests.post('http://mysvc:8080/notify', json=json.dumps(jsonPrep), headers=headers)抱怨go server:E1026 15:49:48.974117 1 main.go:59] Failed to decode the request json json: cannot unmarshal string into Go value of type main.Data当我curl在python.谁能帮我找出问题所在?
1 回答
慕森卡
TA贡献1806条经验 获得超8个赞
json
的参数用于requests.post()
传递尚未调用json.dumps()
它的值。 requests
调用json.dumps()
参数json
本身,所以因为你正在传递json=json.dumps(jsonPrep)
,jsonPrep
最终会被 JSONified 两次,这不是你想要的。
要么使用data
:
requests.post(..., data=json.dumps(jsonPrep), ...)
或摆脱json.dumps()
:
requests.post(..., json=jsonPrep, ...)
- 1 回答
- 0 关注
- 86 浏览
添加回答
举报
0/150
提交
取消