无法在golang中解组后json python请求

时间:2017-10-12 16:24:19

标签: python json python-3.x go gorilla

这是我的python代码(客户端):

import requests
import json
import datetime
headers = {'Content-type': 'application/json',"Authorization":"Bearer MYREALLYLONGTOKENIGOT" }
url = 'http://127.0.0.1:9210/59c94c860a52840958543027/comment/59dea421c26d684270e9321e'
data = { 'sender' : '59c94c860a52840958543027', 'receiver':'59dea421c26d684270e9321e',
        'score' :5,
        'text':'tres jolie 2'}
data_json = json.dumps(data)
r = requests.post(url=url,headers=headers,json=data_json)
r.json()

这是我的golang服务器端代码:

type CommentSent struct {
    Sender    string `json:"sender,omitempty"`
    Receiver  string `json:"receiver,omitempty"`
    Score     int `json:"score,omitempty"`
    Text      string `json:"text,omitempty"`
}


func PostComment(w http.ResponseWriter, r *http.Request) {
    var token string
    token = getToken(r)
    fmt.Println(token)
    vars := mux.Vars(r)
    idUser := vars["idUser"]
    idUserReceiver := vars["idUserReceiver"]
    fmt.Println(idUser)
    fmt.Println(idUserReceiver)
    var commentSend = CommentSend{}
    // body, err := ioutil.ReadAll(r.Body)
    // log.Println(string(body))
    decoder := json.NewDecoder(r.Body)
    err := decoder.Decode(&commentSend)
    if (err != nil){
        Info.Println("error")
        Info.Println(err)

    }

这是给我评论的行:

2017/10/12 18:21:29 "{\"sender\": \"59c94c860a52840958543027\", \"score\": 5, \"receiver\": \"59dea421c26d684270e9321e\", \"text\": \"tres jolie 2\"}"

这是我得到的错误:

INFO: 2017/10/12 18:22:32 comment.go:235: json: cannot unmarshal string into Go value of type main.CommentSent

我不明白为什么我有这个错误,json和python部分似乎是正确的,golang服务器端似乎也是正确的。

2 个答案:

答案 0 :(得分:2)

您的整个请求正文是引用的JSON字符串,而不是原始JSON。

"{\"sender\":....

发送原始JSON,即:

{"sender":...

或者在Go程序中取消它。发送原始JSON可能是更好的解决方案。如何做到这一点,我不知道,因为我不是Python大师。

答案 1 :(得分:0)

我知道有一个答案涵盖了go方面,但是当谈到Python时,你不应该将字典转换为json。请求库应该为您执行此操作并确保正确发送数据。