b, err := json.Marshal(p1)
json.Unmarshal(b, &p2) // 传递指针可以在函数内部修改p2值
示例:
package main
import (
"encoding/json"
"fmt"
)
// 结构体 <——> json格式
// 序列化:把go语言中的结构体变量 --> json格式的字符串
// 反序列化:json格式的字符串 --> go语言中的能够识别的结构体变量
// 首字母大写 : because 被 json包调用
// 特定格式 双引号内为被json序列化后的名称
type person struct {
Name string `json:"name"`
Age int `json:"age"`
Grades float64 `json:"grades"`
}
func main() {
p1 := person{
Name: "侠奢",
Age: 18,
Grades: 59.9,
}
// 序列化:将person类型变量转换为json格式
b, err := json.Marshal(p1)
if err != nil {
fmt.Printf("marshal failed, err:%v", err)
return
}
fmt.Printf("%v\n", string(b))
// 反序列化:将json转换为person类型变量
var p2 person
json.Unmarshal(b, &p2) // 传递指针可以在函数内部修改p2值
fmt.Printf("%#v\n", p2)
str := `{"name":"猪头","age":16,"grades":99}`
var p3 person
json.Unmarshal([]byte(str), &p3) // 第一个参数为[]byte
fmt.Printf("%#v\n", p3)
}
原文:https://www.cnblogs.com/newbase/p/12790613.html