如何为 []byte 的 json.Marshal 获取空列表 [] 而不是 null?

使用字符串时很容易得到一个空列表[]string{}:


import (

    "encoding/json"

    "fmt"

)


func main() {

    slice1 := []string{} // non-nil but zero-length

    json1, _ := json.Marshal(slice1)

    fmt.Printf("%s\n", json1) // []

}

上面代码的输出是[],但是当我[]byte使用[]byte{}returns 时""。我应该如何获得像我进入的那样的空列表[]string{}?


import (

    "encoding/json"

    "fmt"

)


func main() {

    slice2 := []byte{}

    json2, _ := json.Marshal(slice2)

    fmt.Printf("%s\n", json2) // ""

}


莫回无
浏览 116回答 1
1回答

子衿沉夜

请参阅文档:数组和切片值编码为 JSON 数组,除了 []byte 编码为 base64 编码的字符串,nil 切片编码为空 JSON 值。粗体部分是你得到的原因""。如果你想要[]from ,你需要一个实现接口[]byte{}的自定义命名类型。[]bytejson.Marshaler或者,如果您要查找“整数片段”,则使用[]Nwhere Ncan be any of the basic integer types 而不是uint8类型。该uint8类型将不起作用,因为byteis 的别名与uint8so[]uint8相同,[]byte并且json.Marshal也会""为其输出。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go