【go】golang json.Marshal() slice的零值被转换成null了
go的json库把零值slice转换为null了,我想在返回的json里保留空slice [],请问有什么办法不让他转换为null?
@凌云识木 slice的零值是nil
,转化后就是json的null
,文档是ok的.
@xialeistudio 你的data["a"]是有值的, 且不是零值, 这种情况下转成null
才是有问题.
func main() {data := map[string]interface{}{
"a": make([]string, 0),
}
buf, err := json.Marshal(&data)
log.Println(string(buf), err)
}
输出
2018/01/29 18:43:46 {"a":[]} <nil>
眼见为实
,结果是空数组。不是什么null
手动赋一个空的slice, 要不就在调用端处理这个
变量值为nil时,json编码后就会输出null,可以赋值一个空的slice,什么类型都可以,编码后就会生成[]
你是不是跟php搞到一起了?[]代表的不是null 就是一个空数组而已!如果你想要null 那就a:nil
https://play.golang.org/p/szO...
package mainimport (
"encoding/json"
"log"
)
type S struct {
A []string
}
func main() {
data := &S{}
data2 := &S{A: []string{}}
buf, err := json.Marshal(&data)
log.Println(string(buf), err)
buf2, err2 := json.Marshal(&data2)
log.Println(string(buf2), err2)
}
2009/11/10 23:00:00 {"A":null} <nil>2009/11/10 23:00:00 {"A":[]} <nil>
回答
以上是 【go】golang json.Marshal() slice的零值被转换成null了 的全部内容, 来源链接: utcz.com/a/114177.html