H5W3
当前位置:H5W3 > go > 正文

【go】golang json.Marshal() slice的零值被转换成null了

【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 main
import (
"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>

回答

本文地址:H5W3 » 【go】golang json.Marshal() slice的零值被转换成null了

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址