【问题标题】:Json parsing in go [duplicate]Go中的Json解析[重复]
【发布时间】:2016-10-30 06:20:49
【问题描述】:

我正在尝试解析 this url 中的 json。我的代码如下,但输出不符合预期。我只想为 pushevent 提取有效载荷中的 id、url。我怎么做 。谢谢

type events struct {
    id string `json:"id"`
}

func pullUrlFromGit(urlHolder chan string){

    client := &http.Client{}
    resp, _ := client.Get("https://api.github.com/events")
    defer resp.Body.Close()
    body,_ := ioutil.ReadAll(resp.Body)

    var gtevents []events
    json.Unmarshal(body,&gtevents)

    log.Printf("%+v",gtevents)
}

我得到的输出如下。

[{id:} {id:} {id:} {id:} {id:} {id:} {id:} {id:} {id:} {id:} {id:} {id:} {id:} {id:} {id:} {id:} {id:} {id:} {id:} {id:} {id:} {id:} {id:} {id:} {id:} {id:} {id:} {id:} {id:} {id:}]

【问题讨论】:

    标签: json go unmarshalling


    【解决方案1】:

    id 字段设为大写

    type events struct {
        Id string `json:"id"`
    }
    

    Go json 库使用反射来访问结构的字段。反射只允许修改导出的字段。因此,您需要通过将第一个字母大写来导出该字段。

    Laws of Reflection

    【讨论】:

    • 谢谢..你是对的
    • 只是一个后续问题。当我添加 Type 和 Paylod {Id:4787366250 Type:IssueCommentEvent Payload:{Size:0}} {Id:4787366249 Type:PushEvent Payload:{Size:1}} 时得到如下输出结构本身?我的意思是,我可以执行以下类型事件结构 { Id string json:"id" Type string json:"type":"PushEvent" Payload eventPayload json:"payload" } 检查类型是否为 PushEvent
    猜你喜欢
    • 1970-01-01
    • 2018-12-18
    • 2012-06-15
    • 2014-09-20
    • 2011-04-12
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    相关资源
    最近更新 更多