文档详情

Go语言学习之JSON编码解析与使用.docx

发布:2025-05-13约4.61千字共8页下载文档
文本预览下载声明

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

显示全部
相似文档