go语言解析json失败的解决方法
这期内容当中的小编将会给大家带来有关go语言解析json失败的解决方法,以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
解决办法:
golang首字母大小写意味着改变了成员的访问权限,小写就变成私有的了,不同package是无法访问其他package的私有成员的,导致json.Marshal
(其使用了reflect)无法反射到内容。
打个比方,你如果把json.Marshal(hp)
这个方法的重新实现在main方法下面,struct中的成员变量就可以小写了。
注意:
struct
内的成员变量小写就只有当前包内可以访问。
Golang HTTP请求Json响应解析方法
响应数据如下:
{"number": 3,"message": "success","people": [{"craft": "ISS","name": "Chris Cassidy"}, {"craft": "ISS","name": "Anatoly Ivanishin"}, {"craft": "ISS","name": "Ivan Vagner"}]}
下面是一个http请求并解析json数据到结构体里的示例
package mainimport ("encoding/json""fmt""io/ioutil""log""net/http""time")type people struct {Number int `json:"number"`}func main() {url := "http://api.open-notify.org/astros.json"spaceClient := http.Client{Timeout: time.Second * 2, // Maximum of 2 secs}req, err := http.NewRequest(http.MethodGet, url, nil)if err != nil {log.Fatal(err)}req.Header.Set("User-Agent", "spacecount-tutorial")res, getErr := spaceClient.Do(req)if getErr != nil {log.Fatal(getErr)}if res.Body != nil { defer res.Body.Close()}body, readErr := ioutil.ReadAll(res.Body)if readErr != nil {log.Fatal(readErr)}people1 := people{}jsonErr := json.Unmarshal(body, &people1)if jsonErr != nil {log.Fatal(jsonErr)}fmt.Println(people1.Number)}
上述就是小编为大家分享的go语言解析json失败的解决方法了,如果您也有类似的疑惑,不妨碍参照上述分析进行理解。如果想了解更多相关内容,请关注亿速云行业资讯。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。