struct转json字符串
json.Marshal package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string
Age int
From string
}
func main() {
p := Person{}
p.Name = "xiaoming"
p.Age = 18
p.From = "china"
v, err := json.Marshal(p)
if err != nil {
fmt.Println("marshal failed!", err)
return
}
fmt.Println("marsha result: ", string(v))
return
}
执行后输出:
marsha result: {“Name”:“xiaoming”,“Age”:18,“From”:“china”}
不能转换结构体中未导出变量
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string
age int
From string
}
func main() {
p := Person{}
p.Name = "xiaoming"
p.age = 18
p.From = "china"
v, err := json.Marshal(p)
if err != nil {
fmt.Println("marshal failed!", err)
return
}
fmt.Println("marsha result: ", string(v))
return
}
执行后输出:
marsha result: {“Name”:“xiaoming”,“From”:“china”}
导出json字符串中key名字与结构体变量命名一致,我们可以通过结构体定义时指定导出后key值;并且支持如果结构体中变量为空时不导出。
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"person_name"`
Age int `json:"person_age"`
From string `json:"person_from,omitempty"`
}
func main() {
p := Person{}
p.Name = "xiaoming"
p.Age = 18
v, err := json.Marshal(p)
if err != nil {
fmt.Println("marshal failed!", err)
return
}
fmt.Println("marsha result: ", string(v))
p.From = "china"
v, err = json.Marshal(p)
if err != nil {
fmt.Println("marshal failed!", err)
return
}
fmt.Println("marsha result: ", string(v))
return
}
执行后输出:
marsha result: {“person_name”:“xiaoming”,“person_age”:18}
marsha result: {“person_name”:“xiaoming”,“person_age”:18,“person_from”:“china”}