Go语言JSON编解码神器之marshal的运用
作者:奈何碎银没有几两
这篇文章主要为大家详细介绍了Go语言中JSON编解码神器——marshal的运用,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
一: 简单的进行编解码
package main import ( "encoding/json" "fmt" ) type Person struct { Name string Age int Job string } func main() { // 数据--->Json p := &Person{ Name: "shanwen", Age: 23, Job: "engineer", } // Marshal返回的结果是字节数组 pByte, err := json.Marshal(p) if err != nil { fmt.Println("json marshal error!!!") } // 字节数组需要转成字符串 fmt.Println(string(pByte)) // {"Name":"shanwen","Age":23,"Job":"engineer"} pOut := Person{} err = json.Unmarshal(pByte, &pOut) if err != nil { fmt.Println(err) } fmt.Printf("pOunt Name is %s Age is %d Job is %s\n", pOut.Name, pOut.Age, pOut.Job) // pOunt Name is shanwen Age is 23 Job is engineer }
二:成员变量不可导出
package main import ( "encoding/json" "fmt" ) type Person2 struct { name string // 测试成员变量导出 Age int Job string } func main() { // 数据--->Json p := &Person2{ name: "shanwen", Age: 23, Job: "engineer", } // Marshal返回的结果是字节数组 pByte, err := json.Marshal(p) if err != nil { fmt.Println("json marshal error!!!") } // 字节数组需要转成字符串 fmt.Println(string(pByte)) // {"Age":23,"Job":"engineer"} // 不会导出name字段 }
三:解析成固定字段
package main import ( "encoding/json" "fmt" ) type Person3 struct { Name string `json:"user_name"` // 测试导出固定字段 Age int Job string } func main() { // 数据--->Json p := &Person3{ Name: "shanwen", Age: 23, Job: "engineer", } // Marshal返回的结果是字节数组 pByte, err := json.Marshal(p) if err != nil { fmt.Println("json marshal error!!!") } // 字节数组需要转成字符串 fmt.Println(string(pByte)) // {"user_name":"shanwen","Age":23,"Job":"engineer"} // name解析成user_name了 }
四:嵌套导出
package main import ( "encoding/json" "fmt" ) type Person4 struct { Name string `json:"user_name"` Age int Job string } type Man struct { Person Person4 IsMan bool } func main() { // 数据--->Json m := Man{ IsMan: true, } m.Person.Name = "shanwen" m.Person.Job = "engineer" m.Person.Age = 23 // Marshal返回的结果是字节数组 pByte, err := json.Marshal(m) if err != nil { fmt.Println("json marshal error!!!") } // 字节数组需要转成字符串 fmt.Println(string(pByte)) // {"Person":{"user_name":"shanwen","Age":23,"Job":"engineer"},"IsMan":true} // 复合结构转换 }
五:指针变量
指针变量,编码时自动转换为它所指向的值。
package main import ( "encoding/json" "fmt" ) type Person4 struct { Name string `json:"user_name"` Age int Job string } type Man struct { Person *Person4 IsMan bool } func main() { // 数据--->Json p := new(Person4) p.Name = "shanwen" p.Job = "engineer" p.Age = 23 m := Man{ IsMan: true, } // 指针变量 m.Person = p // Marshal返回的结果是字节数组 pByte, err := json.Marshal(m) if err != nil { fmt.Println("json marshal error!!!") } // 字节数组需要转成字符串 fmt.Println(string(pByte)) // {"Person":{"user_name":"shanwen","Age":23,"Job":"engineer"},"IsMan":true} // 复合结构转换 }
以上就是Go语言JSON编解码神器之marshal的运用的详细内容,更多关于go marshal的资料请关注脚本之家其它相关文章!