go的标准库中有许多有用的工具函数,其中 "encoding/json" 这个包就提供了将类型转化为json格式的函数(详见: https://golang.org/pkg/encoding/json/#Marshal )。示例如下:
package main
import (
"fmt"
"encoding/json"
)
type Vertex struct {
Name string
Age int
weight int
}
func main() {
var xiaoming = Vertex{"miao",18,72}
result,err:=json.Marshal(&xiaoming)
if err!=nil{
fmt.Println("error:",err)
}
fmt.Println(string(result))
-->{"Name":"miao","Age":18}
}
但是这里有个问题,如果结构体中字段的首字母没有大写,就无法正常解析。上边xiaoming的weight字段就被忽略了。
solution:
解决方法是在type定义的时候,在每个字段后边添加格式化字符串(文档称之为tag):
package main
import (
"fmt"
"encoding/json"
)
type Vertex struct {
Name string `json:"name"`
Age int `json:"age"`
Weight int `json:"weight"`
Height int `json:"-"`
}
func main() {
var xiaoming = Vertex{"miao",18,72,180}
result,err:=json.Marshal(&xiaoming)
if err!=nil{
fmt.Println("error:",err)
}
fmt.Println(string(result))
-->{"name":"miao","age":18,"weight":72}
}
如上,执行json.Marshal时,“Name”会被“name”替代,Age和Weight亦然。
另外,如果格式化字符串中json:后面是一个"-",则该字段在转化时会被忽略。
结论:
1.对于需要转化的结构体,定义时其字段的首字母仍要大写
2.在需要的字段后边添加格式化字符串