Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 如何在GO中包含数组作为结构定义的一部分?_Json_Go_Marshalling - Fatal编程技术网

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

Json 如何在GO中包含数组作为结构定义的一部分?,json,go,marshalling,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, se

我试图解析一个相对复杂的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结构的类型声明中的“Docs”定义,但我还没有弄清楚该怎么做


有什么帮助吗?

如果这是您的实际JSON,您将遇到问题。JSON需要在字段名周围加引号,如这里的语言定义所示:并且您可能没有多余的逗号

我在操场上有这一点,在添加了引号并删除了文档中多余的“,”之后,它对我来说很好


我无法重现您的问题,我尝试了以下方法:。文档数组不是空的。这很有趣。如果我像您一样将JSON塞进代码中,它确实可以工作。也许我在这里复制它时做了一些奇怪的事情。现在正在研究。注意,我必须删除id:“thingID_001”之后的逗号,它不起作用,jsonlint将其标记为无效JSON。可能有关系,谢谢,我注意到了。我将检查以确保我的实际数据格式正确。只是为了确认,是的,我的数据源似乎是问题所在。不确定是数据的内容还是数量。我修改了我的HTTPGET以获取一个较小的示例项,它工作得很好。因此,要么是较大的一个有错误,要么就是我没有正确地处理较大的数据集。他们在我的来源中存在。谢谢你的帮助。正如你和维托以简化的形式描述的那样。这很好。这一点正在发挥作用。现在我需要能够正确处理实际的“文档”条目,但这是一个额外的练习。谢谢你的帮助。