json
Go语言提供了"encoding/json"包,作用是对JSON数据的解码和编码。
json编码
构建结构体

将结构体转为json , 只需要2步 :

20行 : json.Marshal() 的参数有1个 , 将上面的结构体struct传进去 , 返回值有2个 , 第1个字节集, , 第二个是错误提示 .
21行 : 通过string( ) 将字节集转换成字符串
执行结果:

有一个小问题 , 我们看到结果均采用了驼峰式显示 , 有的时候并不需要这么显式 , 比如别人需要的是username , 而我们的结构体是UserName , 那有什么办法可以显示出来可以随心所欲呢?

在8行 9行最后分别加上 `json:"username"`和 `json:"password"`后 , 显示出来的就符合我们的需求了 .
`json:"username"`和 `json:"password"`是什么呢?
对于结构体, 为数据字段指定了tag标签,将标签中的数据进行了替换, 结果就是符合我们的要求了.
注意: 默认情况下,结构体的字段为空值时候, 执行的时候会使用默认的零值显示, 如果采用结构体标签tag , 就可以判断编码json结构体的空字段的内容 , 如果是空的就忽略 .

只赋值了UserName , 那么执行结束后 , 由于PassWord没有赋值 , 那么就是默认的值,执行结果就是{"username":"张三","password":""}
我们简单修改一下

在结构体字段的标签后加入omitempty后,执行结果就忽略了空值情况.
json解码
有编码就要有解码,json解码是将字符串类型的内容转换成结构体

23行:定义了1个空的结构体
24行:声明了一个json字符串
25行:将json字符串转换为字节集
26行:采用json.Unmarshal()进行解码,2个参数,第一个是字节集,第二个是解码后的内容存放的变量, 这里为什么用指针型呢?你可以思考一下.
从执行结果上看,执行结果是符合要求的.

从url中获取json数据
结果如下

下一步怎么将获取到的内容转换成结构体呢?


本文介绍了Go语言中使用`encoding/json`包进行JSON数据的编码和解码。内容包括如何通过`json.Marshal()`进行编码,利用结构体标签自定义输出字段名,以及使用`json.Unmarshal()`进行解码。还讨论了如何处理空值和从URL获取JSON数据并转换为结构体。
948

被折叠的 条评论
为什么被折叠?



