golang无法解析json怎么办?


本文摘自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, // 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语言教程》

以上就是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》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...