本文摘自php中文网,作者coldplay.xixi,侵删。

golang无法解析json的解决办法:
golang首字母大小写意味着改变了成员的访问权限,小写就变成私有的了,不同package是无法访问其他package的私有成员的,导致json.Marshal
(其使用了reflect)无法反射到内容。
打个比方,你如果把json.Marshal(hp)
这个方法的重新实现在main方法下面,struct中的成员变量就可以小写了。
注意:
struct
内的成员变量小写就只有当前包内可以访问。
Golang HTTP请求Json响应解析方法
响应数据如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | {
"number" : 3,
"message" : "success" ,
"people" : [{
"craft" : "ISS" ,
"name" : "Chris Cassidy"
}, {
"craft" : "ISS" ,
"name" : "Anatoly Ivanishin"
}, {
"craft" : "ISS" ,
"name" : "Ivan Vagner"
}]
}
|
下面是一个http请求并解析json数据到结构体里的示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | package main
import (
"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,
}
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语言教程》
以上就是golang无法解析json怎么办?的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
go读取通达信历史日线数据
go学习笔记(二):go语言工作区介绍
rtmp协议视频平台easydss开发中如何通过go语言 gorm 框架钩子函数精简代码?
go - 实现项目内链路追踪(二)
ubuntu下安装golang
手撸golang etcd raft协议之8
手撸golang spring ioc/aop 之2
【go从学会到学废】(零) golang简介
gtpl go语言html渲染
2021-03-12:go中,如何确定有没有内存泄露,系统里怎么去监控整体的运行情况,日志是怎么处理
更多相关阅读请进入《golang》频道 >>
老貘
一个与时俱进的Go编程知识库。
转载请注明出处:木庄网络博客 » golang无法解析json怎么办?