Golang 如何解析和生成json
JSON(JavascriptObjectNotation)是一种轻量级的数据交换语言,以文字为基础,具有自我描述性且易于让人阅读。尽管JSON是JavaScript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。JSON与XML最大的不同在于XML是一个完整的标记语言,而JSON不是。JSON由于比XML更小、更快,更易解析,以及浏览器的內建快速解析支持,使得其更适用于网络数据传输领域。
Golang自带的JSON解析库encoding/json,可以用起将结构化数据序列化成json字符串或从json字符串中解析出我们想要的数据。
1.解析json
给一个较为复杂的json字符串,包含数组,数组的元素是json对象。我们需要取出数组第一个元素中的某一个字段值。其它的解析均可参考下面的代码。
packagemain
import(
"encoding/json"
"fmt"
)
funcmain(){
jsonStr:=[]byte(`{"uin":1589276509,"feedID":10000,"videos":[{"picture":"http://qqpublic.qpic.cn/avatar.jpg","duration":"839"}]}`)
varjsonMapmap[string]interface{}
iferr:=json.Unmarshal(jsonStr,&jsonMap);err!=nil{
fmt.Printf("jsondecodefailed,err=%v",err)
return
}
value,ok:=jsonMap["videos"]
fmt.Printf("value=%#v\n",value)
ifok{
sliceValue,ok:=value.([]interface{})
ifok{
mapValue,ok:=sliceValue[0].(map[string]interface{})
ifok{
duration,ok:=mapValue["duration"]
ifok{
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代表JSONbooleans
float64代表JSONnumbers
string代表JSONstrings
nil代表JSONnull
2.生成json
假设我们有如下一个类(结构体)student及其一个实例对象st,将其序列化为json,具体实现如下:
packagemain
import(
"encoding/json"
"fmt"
)
typeStustruct{
Namestring`json:"name"`
Ageint
sexstring
Class*Class`json:"class"`
}
typeClassstruct{
Namestring
Gradeint
}
funcmain(){
//实例化一个数据结构,用于生成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)
iferr!=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",那么转化成的jsonkey就用该标签“name”,否则取字段名作为key,如"Age";
(3)指针变量,编码时自动转换为它所指向的值,如Class变量;
(4)强调一句,序列化成功后的json字符串是纯粹的字符串。
以上就是Golang如何解析和生成json的详细内容,更多关于golang解析、生成json的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。