json是js中的数据表示方法,后面为了标准,同时json也很方便就前后端都在使用
把结构体转换为json格式字符串
序列化
package main
import (
"encoding/json"
"fmt"
)
type person struct {
//此处要使用标识符,标识符开头大写,只有标识符才能在其他包中可见
Name string
Age int
}
func main() {
p1 := person{
Name: "王往",
Age: 1888,
}
b, err := json.Marshal(p1)
if err != nil {
fmt.Printf("Marshal failed, err:%v", err)
return
}
fmt.Printf("%v\n", string(b))
//这里程序返回的结果为:
/*
{"Name":"王往","Age":1888}
*/
}
首字母为什么要大写?
因为是用到了json包来进行序列化,但是不使用标识符就会导致json包无法接收到你当前程序中的结构体变量中的内容
如果想要json中的字段开头是小写可以使用下面的方法
type person struct {
Name string `json:"name"` //注意此处name和:还有json之间不要有空格
Age string `json:"age"`
}
func main() {
p1 := person{
Name: "王往",
Age: 1888,
}
b, err := json.Marshal(p1)
if err != nil {
fmt.Printf("Marshal failed, err:%v", err)
return
}
fmt.Printf("%v\n", string(b))
//程序返回结果为:
/*
{"name":"王往","age":1888}
*/
}
把json格式的字符串转换为go语言的结构体
反序列化
package main
type person struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main(){
str := `{"name":"未来","age":18}`
var p2 person
json.Unmarshal([]byte(str),&p2)//这里要用地址传参,不使用地址传参相当于拷贝了一个新的p2,所以原来的p2是没有值的
fmt.Println(p2)
//这里输出的内容为:
/*
{李四 18}
*/
}
标签:string,err,Age,json,Name,fmt,结构
From: https://www.cnblogs.com/suknna/p/17103307.html