我正在尝试使用golang标记来解析JSON。我没有任何错误,但我的领域是空的
这是我的代码:
type HandleConnection struct {
session string `json:"session"`
passwd int `json:"field1"`
salon string `json:"fied2"`
color string `json:"field3"`
state float64 `json:"field4"`
message string `json:"field5"`
}
func connection(login string, passwd string) (*HandleConnection, error) {
jsonParsedResponse := &HandleConnection{}
resp, err := http.PostForm(ajaxUrl, url.Values{
"q": {"bar"},
"v": {"foo"},
"identifiant": {login},
"motdepasse": {passwd},
"mode": {"0"},
"decalageHoraire": {"0"},
"option": {""},
"salon": {"foo"},
})
if err != nil {
return jsonParsedResponse , err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return jsonParsedResponse, err
}
err = json.Unmarshal(body, &jsonParsedResponse)
if err != nil {
return jsonParsedResponse, err
}
if jsonParsedResponse.state != 2 {
return jsonParsedResponse, errors.New(jsonParsedResponse.message)
}
return jsonParsedResponse, nil
}
返回的json就像那样
{
"field1": "foo",
"fiel2": "bar",
...
}
我想知道什么是更好的错误处理方式。
感谢您阅读
答案 0 :(得分:5)
您在结构中使用未导出的字段时会遇到常见的错误。
encoding/json
包说明(我的重点):
Struct值编码为JSON对象。除非
,否则每个导出的struct字段都将成为该对象的成员
- 字段的标记为“ - ”或
- 该字段为空,其标签指定“omitempty”选项。
这是由于Go不允许反映未导出的字段 如果您将结构更改为以下内容,它应该可以工作:
type HandleConnection struct {
Session string `json:"session"`
Passwd int `json:"field1"`
Salon string `json:"fied2"`
Color string `json:"field3"`
State float64 `json:"field4"`
Message string `json:"field5"`
}
答案 1 :(得分:-1)
您需要使用Capitals启动struct属性,以便它们是公共的,并且unmarshaling可以访问这些字段。