- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我试图省略 nil 接口(interface)值
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))
}
这是 playground 链接 https://play.golang.org/p/cAE1IrSPgm这输出
{"val":null}
为什么不将其视为空值?有没有办法从 json 中省略这些 nil 值。
最佳答案
来自documentation :
Struct values encode as JSON objects. Each exported struct field becomes a member of the object unless
- the field's tag is "-", or
- the field is empty and its tag specifies the "omitempty" option.
The empty values are false, 0, any nil pointer or interface value, and any array, slice, map, or string of length zero.
没有遗漏的原因说明了here
An interface value is nil only if the inner value and type are bothunset, (nil, nil). In particular, a nil interface will always hold anil type. If we store a nil pointer of type *int inside an interfacevalue, the inner type will be *int regardless of the value of thepointer: (*int, nil). Such an interface value will therefore benon-nil even when the pointer inside is 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
关于json - omitempty 不会省略 JSON 中的接口(interface) nil 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44320960/
有什么方法可以强制omitempty对于结构中的所有字段 没有 针对每个字段明确指定它? type Item struct { Name string `json:"item,omit
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我很好奇 omit empty 的用例是什么: type Example struct { ID string `json:",omitempty"` Name
我正在尝试为 Alfred 2 应用程序生成 XML。看起来有点像这样: My Thing My Other Thing
在我的网络服务中,我有一个模型: // Comment struct type Comment struct { Owner UserObject `json:
我正在使用返回 XML 的 REST API 并尝试解码 XML,但我遇到的问题似乎是 omitempty不管用。这是一个工作 XML 文件的示例: Firstname
如果 null sql.NullString 无效,应该如何不呈现它? - http://play.golang.org/p/pzSWS9vE0J 它似乎不能与 omitempty struct 标签
尝试 json Marshal 包含 2 个时间字段的结构。但我只希望该字段具有时间值(value)。所以我正在使用 json:",omitempty" 但它不起作用。 我可以将 Date 值设置为什
下面的代码是解释。我可以使用非简单类型的唯一方法是使该类型成为指针。 是否有不使用指针的替代解决方案? 代码不工作: type Foo struct { Bar Bar `json:"bar,
我正在使用带有 json 代理的 google grpc。出于某种原因,我需要从 *.pb.go 文件中生成的结构中删除 omitempty 标记。 如果我有这样的原始消息 message Statu
当将一个结构编码为 JSON 时,我可以将一个变量分配给它对应的“空值”,并且即使在使用 omitempty 时仍然传递它,但是我无法在嵌套结构中获得相同的结果,因为尽管它被省略了作为一个指针。这可能
我试图省略 nil 接口(interface)值 package main import ( "fmt" "encoding/json" ) type MyStruct struct{
请看下面。 https://play.golang.org/p/HXrqLqYIgz 我的期望值是: {"Byte2":0,"Name":"bob"} 但实际: {"ByteArray":[0,0,0
我正在处理一个优惠券表单,其中有一些可选字段。 简介: 所有表单字段值都以 JSON 格式接收并映射到 Golang 结构中。在结构中,我为每个字段添加了一个“omitempty”标志。因此只有那些具
我是一名优秀的程序员,十分优秀!