无法在Golang中解组JSON数组

时间:2016-04-19 19:35:27

标签: http go unmarshalling

我在URL中收到以下回复,我想解组它,但我无法这样做。 这是我想要解组的那种回应。

[
  {"title": "Angels And Demons", "author":"Dan Brown", "tags":[{"tagtitle":"Demigod", "tagURl": "/angelDemon}] }
  {"title": "The Kite Runner", "author":"Khalid Hosseinei", "tags":[{"tagtitle":"Kite", "tagURl": "/kiteRunner"}] }
  {"title": "Dance of the dragons", "author":"RR Martin", "tags":[{"tagtitle":"IronThrone", "tagURl": "/got"}] }
]

我试图解散这种反应,但却无法解决。这是我想写的代码。

res, err := http.Get(url)
if err != nil {
    log.WithFields(log.Fields{
        "error": err,
    }).Fatal("Couldn't get the html response")
}
defer res.Body.Close()
b, err := ioutil.ReadAll(res.Body)
if err != nil {
    log.WithFields(log.Fields{
        "error": err,
    }).Fatal("Couldn't read the response")
}

s := string(b)

var data struct {
    Content []struct {
        Title           string   `json:"title"`
        Author          string   `json:"author"`
        Tags            map[string]string   `json:"tags"`
    }
}

if err := json.Unmarshal([]byte(s), &data); err != nil {
    log.WithFields(log.Fields{
        "error": err,
    }).Error("Un-marshalling could not be done.")
}

fmt.Println(data.Content)

有人可以帮我这方面吗? 提前谢谢。

3 个答案:

答案 0 :(得分:0)

改变它

var data struct {
    Content []struct {
        Title           string   `json:"title"`
        Author          string   `json:"author"`
        Tags            map[string]string   `json:"tags"`
    } }

到这个

type Content struct {
        Title           string   `json:"title"`
        Author          string   `json:"author"`
        Tags            map[string]string   `json:"tags"`

}
var data []Content

答案 1 :(得分:0)

考虑将其拆分为一部分内容:

type Content struct {
    Title  string            `json:"title"`
    Author string            `json:"author"`
    Tags   map[string]string `json:"tags"`
}

// Send in your json
func convertToContent(msg string) ([]Content, error) {
    content := make([]Content, 0, 10)

    buf := bytes.NewBufferString(msg)
    decoder := json.NewDecoder(buf)

    err := decoder.Decode(&content)
    return content, err
}

在此处查看您的用例示例:http://play.golang.org/p/TNjb85XjpP

答案 2 :(得分:0)

我能够通过在上面的代码中做一个简单的修改来解决这个问题。

var Content []struct {
    Title           string   `json:"title"`
    Author          string   `json:"author"`
    Tags            map[string]string   `json:"tags"`
}

感谢您的所有回复。