【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>

回答

以上是 【go】golang json.Marshal() slice的零值被转换成null了 的全部内容, 来源链接: utcz.com/a/114177.html

回到顶部