2015-11-23 25 views
0

解码和映射JSON对象来自PHP我是一个TOTAL Golang newb。我读了一个和我非常相似的问题,但是我的实现稍微偏离了一点。每当我使用下面的代码进行解码时,变量msg.Username总是空白。 Golang不会在这里抛出错误,所以我知道我在这里错过了超小的东西,非常重要,但我不知道它会是什么。我会非常感谢任何帮助,我当然期望这是一个从头到脚的顿悟。谢谢!如何使用NewDecode,Golang和请求* http.Request

//The JSON I'm posting to my local server is 
//{"company_domain":"example.com", "user_name":"testu","password":"testpw"} 

func Login(w http.ResponseWriter, req *http.Request) { 
    type Message struct { 
     CompanyDomain string 
     Username  string 
     Password  string 
    } 
    //decode 
    var msg Message 
    decoder := json.NewDecoder(req.Body) 
    err := decoder.Decode(&msg) 
    if err != nil { 
     err.Error()) 
    } 
    w.Write([]byte(msg.Username))// <- This print statement always comes in blank 
    authorize, err := models.VerifyAuth(msg.Username, msg.Password, msg.CompanyDomain, w) 
    if err != nil { 
     err.Error()) 
    } 
    ... 

回答

2

标签的结构域,因此解码器知道如何json的键映射到你的结构。

type Message struct { 
    CompanyDomain string `json:"company_domain"` 
    Username  string `json:"user_name"` 
    Password  string `json:"password"` 
} 
+0

是的,这是问题。感谢您的映射解释! – over300laughs

0

你只需要添加json:"field_name"到你的结构:

type Message struct { 
    CompanyDomain string `json:"company_domain"` 
    Username  string `json:"user_name"` 
    Password  string `json:"password"` 
}