来源:自学PHP网 时间:2020-09-21 11:34 作者:小飞侠 阅读:次
[导读] Golang 如何解析和生成json...
|
今天带来Golang 如何解析和生成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)
}
}
}
}
}
程序输出:
解析json字符串时,需要注意如下几点:
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))
}
程序输出结果:
阅读以上代码可以看出: (1)只要是可导出成员(变量首字母大写),都可以转成json。因成员变量sex是不可导出的,故无法转成json; (2)如果变量打上了json标签,如Name旁边的 (3)指针变量,编码时自动转换为它所指向的值,如Class变量; (4)强调一句,序列化成功后的json字符串是纯粹的字符串。 以上就是Golang 如何解析和生成json的详细内容,更多关于golang 解析、生成json的资料请关注自学php网其它相关文章! 以上就是关于Golang 如何解析和生成json全部内容,感谢大家支持自学php网。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com