go中type转json首字母大写问题

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.在需要的字段后边添加格式化字符串

猜你喜欢

转载自blog.csdn.net/weixin_36094484/article/details/82189780