Go语言学习之JSON编码解析与使用.docx
第
Go语言学习之JSON编码解析与使用
目录1.Map转JSON2.Json转Map3.结构体转JSON3.1无字段标签3.2有字段标签3.3匿名字段4.JSON转结构体5.切片转JSON6.JSON转切片
1.Map转JSON
packagemain
import(
encoding/json
fmt
funcmain(){
//map里面
map1:=map[string]string{
name:张三,
age:18,
home:北京,
//将map解析成json
json1,err:=json.Marshal(map1)
iferr!=nil{
fmt.Println(err.Error())
fmt.Printf(json1:%s类型:%T\n,json1,json1)
map2:=map[string][]string{
fruit:{香蕉,葡萄},
coder:{PHP,Go,Java},
likes:{打游戏,看动漫},
json2,err:=json.Marshal(map2)
iferr!=nil{
fmt.Println(err.Error())
fmt.Printf(json2:%s类型:%T\n,json2,json2)
/**输出
json1:{age:18,home:北京,name:张三}类型:[]uint8
json2:{coder:[PHP,Go,Java],fruit:[香蕉,葡萄],likes:[打游戏,看动漫]}类型:[]uint8
*/
2.Json转Map
packagemain
import(
encoding/json
fmt
funcmain(){
json1:=`{age:18,home:北京,name:张三}`
map1:=make(map[string]string)
err:=json.Unmarshal([]byte(json1),map1)
iferr!=nil{
fmt.Println(err.Error())
fmt.Printf(map1:%vT:%T\n,map1,map1)
json2:=`{coder:[PHP,Go,Java],fruit:[香蕉,葡萄],likes:[打游戏,看动漫]}`
map2:=make(map[string][]string)
err=json.Unmarshal([]byte(json2),map2)
iferr!=nil{
fmt.Println(err.Error())
fmt.Printf(map2:%vT:%T\n,map2,map2)
/**输出
map1:map[age:18home:北京name:张三]T:map[string]string
map2:map[coder:[PHPGoJava]fruit:[香蕉葡萄]likes:[打游戏看动漫]]T:map[string][]string
*/
3.结构体转JSON
3.1无字段标签
结构体转换成JSON在开发中经常会用到。encoding/json包是通过反射机制来实现编解码的,fontcolor=red因此结构体必须导出所转换的字段,没有导出的字段不会被encoding/json包解析。/font
packagemain
import(
encoding/json
fmt
typeStudentstruct{
Namestring
Ageint
Classstring
phonestring//小写字段,则不是会导出
funcmain(){
s:=Student{
Name:张三,
Age:17,
Class:三年级,
phone:
json1,err:=json.Marshal(s)
iferr!=nil{
fmt.Println(err.Error())
fmt.Printf(json:%s\n,json1)
//输出json:{Name:张三,Age:17,Class:三年级}
3.2有字段标签
json包在解析结构体时,如果遇到k