golang 中 实现数据结构与json字符串的转换
package main
import (
"encoding/json"
"fmt"
)
func main() {
// map转json
m := map[string]interface{}{"张三": map[string]interface{}{"性别": "男", "年龄": 30}}
json1, err := json.Marshal(m)
if err != nil {
fmt.Println(err)
}
// 返回值是 []byte 切片,需要强转string
fmt.Printf("%v\n", string(json1))
// json 转map
str := string(json1) // m模拟json字符串
var buf = make(map[string]interface{})
json.Unmarshal([]byte(str), &buf) // 转换之前要将json字符串转成byte切片类型 相当于先将字符串拆成字符切片再转
fmt.Println(buf)
// 切片转json
s := []interface{}{map[string]interface{}{"张三": map[string]interface{}{"年龄": 30, "性别": "男"}, "王五": map[string]interface{}{"年龄": 30, "性别": "男"}}}
buf1, err := json.Marshal(s)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(buf1))
// json 转切片
var ss = make([]interface{}, 1)
json.Unmarshal(buf1, &ss)
fmt.Println(ss)
// 结构体转JSON
type Student struct {
Name string `json:"name"`
Gender string `json:"gender"`
Age int `json:"age"`
Hobby []string `json:"hobby"`
}
// 因为设置了tag,所以转出来的json是小写的
stu1 := Student{"张三", "男", 20, []string{"篮球", "RAP", "唱跳"}}
json_stu1, _ := json.Marshal(stu1)
fmt.Println(string(json_stu1))
// json转结构体
json_stu11 := new(Student)
json.Unmarshal(json_stu1, json_stu11)
fmt.Println(*json_stu11)
}