如何在GO中包含数组作为结构定义的一部分?

时间:2014-07-23 19:43:35

标签: json go marshalling

我试图解析一个相对复杂的JSON。它有直接节点,并且它具有可变数量的元素的数组。这是一个示例:

{
status: 200,
generated: "2014-07-23T13:09:30.315Z",
copyright: "Copyright (c) 2014 Us Not You. All Rights Reserved.",
results: 1,
start: 0,
links: {
        next: null,
        prev: null,
        self: "http://thing.com/thing.json"
    },
docs: [
        {
            id: "thingID_001",
        }
    ]
}

当然是简化的。可能有零个或多个文档,每个文档都有许多节点。 "链接"很简单,我用正确的字段定义一个结构,然后我们去。但是文档,我无法进入元帅。这是我的代码:

import (
    "net/http"
    "fmt"
    "io/ioutil"
    "encoding/json"
)
type Thinglinks struct {
    Next string
    Prev string
    Self string
}
//type ThingDoc struct {
//    Id string
//   Type string
//}
type ThingSection struct {
    Status int
    Generated string
    Copyright string
    Results int
    Start int
    Links thinglinks
    Docs []map[string]interface{}
}

func main() {
    resp, err := http.Get("http://thing.com/thing.json")
    if err != nil {
        fmt.Println(err)
        }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    var s ThingSection
    err3 := json.Unmarshal(body, &s)
    if err3 == nil {
        fmt.Println(s)
        fmt.Println(s.Links.Self)
        if len(s.Docs) >0 {
            fmt.Println(s.Docs[0])
        }
    } else {
        fmt.Println(err3)
    }
}

当我编译并运行时,我得到除Docs之外的所有节点的预期结果,这些节点总是空集。

我强烈怀疑它是" Docs"在ThingSection结构的类型声明中的定义,但我还没有弄清楚该做什么。

有任何帮助吗?

1 个答案:

答案 0 :(得分:5)

如果这是您的实际JSON,您将遇到问题。 JSON需要在字段名称周围引用,如此处的语言定义所示:http://json.org/并且您可能没有无关的逗号。

我在操场上有这一点,在添加引号并删除无关的'之后,它对我很有用。在文档中。

http://play.golang.org/p/6OYeTuftfg