欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Golang 如何解析和生成json

程序员文章站 2022-07-02 10:00:01
json(javascript object notation)是一种轻量级的数据交换语言,以文字为基础,具有自我描述性且易于让人阅读。尽管json是javascript的一个子集,但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对象。我们需要取出数组第一个元素中的某一个字段值。其它的解析均可参考下面的代码。

程序输出:

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,具体实现如下:

程序输出结果:

{"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 解析、生成json的资料请关注其它相关文章!