我试图省略nil接口值
package main
import (
"fmt"
"encoding/json"
)
type MyStruct struct{
Val interface{} `json:"val,omitempty"`
}
func main() {
var s []string
s = nil
m := MyStruct{
Val : s,
}
b, _:= json.Marshal(m)
fmt.Println(string(b))
}
这是游乐场链接https://play.golang.org/p/cAE1IrSPgm 这输出
{"val":null}
为什么不将它视为空值?有没有办法从json中省略这些nil值。
答案 0 :(得分:3)
Struct值编码为JSON对象。除非
,否则每个导出的struct字段都将成为该对象的成员
- 字段的标记是" - "或
- 该字段为空,其标记指定" omitempty"选项。
空值为false,0,任何nil指针或接口值,以及长度为零的任何数组,切片,映射或字符串。
没有省略的原因是here
仅当内部值和类型都是两者时,接口值才为nil 未设置,(无,无)。特别是,nil接口将始终保持 零类型。如果我们在接口中存储类型为* int的nil指针 值,内部类型将是* int,无论值是什么 指针:(* int,nil)。因此,这样的界面值将是 即使内部指针为零也不为零。
eg:
var s []string
s = nil
var temp interface{}
fmt.Println(temp==nil) // true
temp = s
fmt.Println(temp==nil) // false
对于您的情况,您可以
https://play.golang.org/p/ZZ_Vzwq4QF
或
https://play.golang.org/p/S5lMgqVXuB