package main import ( "encoding/json" "fmt" ) func main() { var data = map[string]any{} data["errcode"] = 40029 data["errmsg"] = "invalid code" // map转JSON jsonByte, _ := json.Marshal(data) jsonStr := string(jsonByte) fmt.Println("jsonStr =", jsonStr) // jsonStr = {"errcode":40029,"errmsg":"invalid code"} // JSON转map dataMap := map[string]any{} _ = json.Unmarshal([]byte(jsonStr), &dataMap) // 注意这里是传内存地址,不是传值 fmt.Println("dataMap =", dataMap) // dataMap = map[errcode:40029 errmsg:invalid code] }
package main import ( "encoding/json" "fmt" ) func main() { s := []string{"张三", "李四", "王五"} // 切片转JSON jsonByte, _ := json.Marshal(s) jsonStr := string(jsonByte) fmt.Println("jsonStr =", jsonStr) // jsonStr = ["张三","李四","王五"] // JSON转切片 var slice []string _ = json.Unmarshal([]byte(jsonStr), &slice) // 注意这里是传内存地址,不是传值 fmt.Println("slice =", slice) // slice = [张三 李四 王五] }
package main import ( "encoding/json" "fmt" ) // human 定义一个名为human的结构体 type human struct { Name string `json:"name"` // 姓名 Age int `json:"age"` // 年龄 Gender string `json:"gender"` // 性别 } func main() { hum := &human{} (*hum).Name = "张三" (*hum).Age = 18 (*hum).Gender = "男" // 结构体转JSON jsonByte, _ := json.Marshal(hum) jsonStr := string(jsonByte) fmt.Println("jsonStr =", jsonStr) // jsonStr = {"name":"张三","age":18,"gender":"男"} // JSON转结构体 var h = &human{} _ = json.Unmarshal([]byte(jsonStr), h) fmt.Println("h =", h) // h = &{张三 18 男} } //========== 总结 ==========// // 1、结构体字段名首字母必须大写,否则转JSON时无法获取数据(但不会报错)。 // 2、结构体转JSON时如果不想字段名首字母为大写可以给字段加标签,如Name字段加上了标签『`json:"name"`』,在转JSON时就 // 会输出name,而不是Name。
Copyright © 2024 码农人生. All Rights Reserved