Golang 如何解析和生成json
来源:脚本之家
时间:2023-01-07 11:47:57 460浏览 收藏
怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《Golang 如何解析和生成json》,涉及到解析、JSON、生成,有需要的可以收藏一下
JSON(Javascript Object Notation)是一种轻量级的数据交换语言,以文字为基础,具有自我描述性且易于让人阅读。尽管JSON是JavaScript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。JSON与XML最大的不同在于XML是一个完整的标记语言,而JSON不是。JSON由于比XML更小、更快,更易解析,以及浏览器的內建快速解析支持,使得其更适用于网络数据传输领域。
Golang自带的JSON解析库encoding/json,可以用起将结构化数据序列化成json字符串或从json字符串中解析出我们想要的数据。
1.解析json
给一个较为复杂的json字符串,包含数组,数组的元素是json对象。我们需要取出数组第一个元素中的某一个字段值。其它的解析均可参考下面的代码。
package main import ( "encoding/json" "fmt" ) func main() { jsonStr := []byte(`{"uin":1589276509,"feedID":10000,"videos":[{"picture":"http://qqpublic.qpic.cn/avatar.jpg","duration":"839"}]}`) var jsonMap map[string]interface{} if err := json.Unmarshal(jsonStr, &jsonMap); err!=nil { fmt.Printf("json decode failed, err=%v", err) return } value, ok:=jsonMap["videos"] fmt.Printf("value=%#v\n", value) if ok { sliceValue, ok := value.([]interface{}) if ok { mapValue, ok := sliceValue[0].(map[string]interface{}) if ok { duration, ok := mapValue["duration"] if ok { fmt.Printf("d=%v,type=%T\n",duration,duration) } } } } }
程序输出:
value=[]interface {}{map[string]interface {}{"picture":"http://qqpublic.qpic.cn/avatar.jpg", "duration":"839"}}
d=839,type=string
解析json字符串时,需要注意如下几点:
(1)Go类型和JSON类型的对应关系如下:
map[string]interface{}代表JSON对象
[]interface{}代表JSON数组
bool代表JSON booleans
float64代表JSON numbers
string代表JSON strings
nil 代表JSON null
2.生成json
假设我们有如下一个类(结构体)student 及其一个实例对象st,将其序列化为json,具体实现如下:
package main import ( "encoding/json" "fmt" ) type Stu struct { Name string `json:"name"` Age int sex string Class *Class `json:"class"` } type Class struct { Name string Grade int } func main() { //实例化一个数据结构,用于生成json字符串 stu := Stu{ Name: "张三", Age: 18, sex: "男", } //指针变量 cla := new(Class) cla.Name = "1班" cla.Grade = 3 stu.Class=cla //Marshal失败时err!=nil jsonStu, err := json.Marshal(stu) if err != nil { fmt.Println("生成json字符串错误") } //jsonStu是[]byte类型,转化成string类型便于查看 fmt.Println(string(jsonStu)) }
程序输出结果:
{"name":"张三","Age":18,"class":{"Name":"1班","Grade":3}}
阅读以上代码可以看出:
(1)只要是可导出成员(变量首字母大写),都可以转成json。因成员变量sex是不可导出的,故无法转成json;
(2)如果变量打上了json标签,如Name旁边的 json:"name"
,那么转化成的json key就用该标签“name”,否则取字段名作为key,如"Age";
(3)指针变量,编码时自动转换为它所指向的值,如Class变量;
(4)强调一句,序列化成功后的json字符串是纯粹的字符串。
本篇关于《Golang 如何解析和生成json》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!
-
131 收藏
-
329 收藏
-
377 收藏
-
141 收藏
-
203 收藏
-
233 收藏
-
322 收藏
-
181 收藏
-
316 收藏
-
244 收藏
-
300 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 507次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习