json.Marshal()
JSON输出的时候必须注意,只有导出的字段(首字母是大写)才会被输出,如果修改字段名,那么就会发现什么都不会输出,所以必须通过struct tag定义来实现。针对JSON的输出,我们在定义struct tag的时候需要注意的几点是:- 字段的tag是"-",那么这个字段不会输出到JSON- tag中带有自定义名称,那么这个自定义名称会出现在JSON的字段名中- tag中如果带有"omitempty"选项,那么如果该字段值为空,就不会输出到JSON串中- 如果字段类型是bool, string, int, int64等,而tag中带有",string"选项,那么这个字段在输出到JSON的时候会把该字段对应的值转换成JSON字符串
定义如下
type TData struct {
List []TListItem `json:"list,omitempty"`
Version int `json:"version"`
}
使用如下
var newData TData
for _, value range []int{1,2,3} {
newData.List = append(newData.list, value)
}
newData.Version = 1
result, _ := json.Marshal(newData)
// result为 {list:[1,2,3],version:1}
正常使用没什么问题,但是如果不给list赋值,则result会为 {list: null,version:1}
但是我想要list为[]
所以不能不赋值
newData.List = make([]TListItem, 0)
这样出来就是正确的了