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)

这样出来就是正确的了