企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 一、结构体转JSON ~~~ package main import ( "fmt" "encoding/json" ) // 结构体 type User3 struct { Name string Age int } func main() { // 一、格式化方式一 u1 := User3{"aaa",18} b,err:=json.Marshal(u1) if err!=nil{ fmt.Println("json err",err) } fmt.Println(string(b)) // 二、格式化方式二 // 第二个参数。每行的前缀 // 第三个参数:每行的缩进格式 b,err=json.MarshalIndent(u1,""," ") if err!=nil{ fmt.Println("json err",err) } fmt.Println(string(b)) } ~~~ 运行结果: {"Name":"aaa","Age":18} { "Name": "aaa", "Age": 18 } ## 二、为结构体字段取别名 ~~~ package main import ( "fmt" "encoding/json" ) // 结构体 type User3 struct { Name string `json:"name"` Age int `json:"age"` } func main() { // 一、格式化方式一 u1 := User3{"aaa",18} b,err:=json.Marshal(u1) if err!=nil{ fmt.Println("json err",err) } fmt.Println(string(b)) // 二、格式化方式二 // 第二个参数。每行的前缀 // 第三个参数:每行的缩进格式 b,err=json.MarshalIndent(u1,""," ") if err!=nil{ fmt.Println("json err",err) } fmt.Println(string(b)) } ~~~ 运行结果: {"name":"aaa","age":18} { "name": "aaa", "age": 18 } ## 三、map转化成Json ~~~ package main import ( "fmt" "encoding/json" ) // 结构体 type User3 struct { Name string `json:"name"` Age int `json:"age"` } func main() { maps := make(map[string]interface{}) maps["name"] = "aaa" maps["age"] = 15 maps["sex"] = "男" json,err := json.Marshal(maps) if err!=nil{ fmt.Println("json err",err) } fmt.Println(string(json)) } ~~~ 运行结果: {"age":15,"name":"aaa","sex":"男"} ## 四、解码(解析到结构体) ~~~ package main import ( "fmt" "encoding/json" ) // 结构体 type User3 struct { Name string `json:"name"` Age int `json:"age"` } func main() { //创建json数据 b := []byte(`{"age":15,"name":"aaa"}`) // 申明结构体 var u User3 //json解析到结构体 err :=json.Unmarshal(b,&u) if err!=nil{ fmt.Println("json err",err) } fmt.Println(u) } ~~~ 运行结果: {aaa 15} ## 五、解码(解析到interface) ~~~ package main import ( "encoding/json" "fmt" ) func main() { //1.创建json数据 b := []byte(`{"Name":"zhangsan","Hobby":"女"}`) //2.声明空interface var i interface{} //3.解析 err := json.Unmarshal(b, &i) if err != nil { fmt.Println(err) } //默认转成了map fmt.Println(i) //4.解析到interface的json可以判断类型 m := i.(map[string]interface{}) for k, v := range m { switch vv := v.(type) { case string: fmt.Println(k, "是string类型", vv) case int: fmt.Println(k, "是int类型", vv) default: fmt.Println("xxx") } } } ~~~