在 Go 中解析远程 json

所以基本上,我试图解析一个 JSON 并将其值分配给一个结构。运行此程序时没有出现任何错误,但返回的 struct yeilds {0 0 0} 不正确。我尝试输入一个假 url 来查看是否只是连接问题,但似乎并非如此。


因为 Go 不是异步的,所以按顺序调用应该没有问题,对吧?


这是我在某个网站上托管的 JSON


{"ability":5335,"time":338,"level":1}

这是代码


package main


import (

    "encoding/json"

    "fmt"

    "io/ioutil"

    "net/http"

)


type prog struct {

    ability int64

    time    int64

    level   int64

}


func main() {

    url := "https://api.myjson.com/bins/2c54h"


    //get the data from the url

    res, err := http.Get(url)

    //error handling

    defer res.Body.Close()


    if err != nil {

        panic(err)

    }


    // read json response

    data, err := ioutil.ReadAll(res.Body)

    // error handling

    var jsonData prog

    err = json.Unmarshal([]byte(data), &jsonData)


    if err != nil {

        panic(err)

    }


    //test struct data

    fmt.Println(jsonData)

}


GCT1015
浏览 194回答 3
3回答

叮当猫咪

重命名结构的字段,以便它们以大写字母开头,并且它应该可以工作。如有必要,还可以使用反引号在每个字段名称的末尾附加一个提示。

慕容森

你几乎拥有它。您只需要更改声明结构的方式以包含大写字母(否则它们将不会被导出)并指定json使用小写名称。type prog struct {    Ability int64 `json:"ability"`    Time    int64 `json:"time"`    Level   int64 `json:"level"`}

月关宝盒

必须导出结构中的字段(以大写字母开头),JSON 包才能看到它们。type prog struct {    Ability int64    Time    int64    Level   int64}有关示例,请参见http://play.golang.org/p/yjtth5kliB。您在 JSON 解析之前下载数据的事实与您看到的内容无关。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go