无法在go lang中解析JSON

时间:2013-11-20 15:05:57

标签: json go marshalling unmarshalling

我正在尝试使用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",
  ...
}

我想知道什么是更好的错误处理方式。

感谢您阅读

2 个答案:

答案 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可以访问这些字段。