转自:https://blog.csdn.net/zxy_666/article/details/80173288
1.Json Marshal
将数据结构编码成json字符串。Json(Javascript Object Nanotation)是一种数据交换格式,常用于前后端数据传输。任意一端将数据转换成json 字符串,另一端再将该字符串解析成相应的数据结构,如string类型,struct对象等。
type Stu struct { Name string `json:"name"` Age int HIgh bool sex string Class *Class `json:"class"` } type Class struct { Name string Grade int } func main() { //实例化一个数据结构,用于生成json字符串 stu := Stu{ Name: "张三", Age: 18, HIgh: true, 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)) }
输出:
{"name":"张三","Age":18,"HIgh":true,"class":{"Name":"1班","Grade":3}}
只要是可导出成员(变量首字母大写),都可以转成json。因成员变量sex是不可导出的,故无法转成json。json编码成字符串后就是纯粹的
字符串了。
2.Json Unmarshal
将json字符串解码到相应的数据结构。
type StuRead struct { Name interface{} `json:"name"` Age interface{} HIgh interface{} sex interface{} Class interface{} `json:"class"` Test interface{} } type Class struct { Name string Grade int } func main() { //json字符中的"引号,需用\进行转义,否则编译出错 //json字符串沿用上面的结果,但对key进行了大小的修改,并添加了sex数据 data:="{\"name\":\"张三\",\"Age\":18,\"high\":true,\"sex\":\"男\",\"CLASS\":{\"naME\":\"1班\",\"GradE\":3}}" str:=[]byte(data) //1.Unmarshal的第一个参数是json字符串,第二个参数是接受json解析的数据结构。 //第二个参数必须是指针,否则无法接收解析的数据,如stu仍为空对象StuRead{} //2.可以直接stu:=new(StuRead),此时的stu自身就是指针 stu:=StuRead{} err:=json.Unmarshal(str,&stu) //解析失败会报错,如json字符串格式不对,缺"号,缺}等。 if err!=nil{ fmt.Println(err) } fmt.Println(stu) }
输出:
{张三 18 true <nil> map[naME:1班 GradE:3] <nil>}
不可导出的变量无法被解析
(如sex变量,虽然json串中有key为sex的k-v,解析后其值仍为nil,即空值)
标签:Class,string,sex,stu,json,字符串,Go,marshal From: https://www.cnblogs.com/BlueBlueSea/p/16842457.html