1 回答

TA贡献2012条经验 获得超12个赞
Go 中的基本类型是不可空的。string是一个基本类型。
为了可以Foo为空,一种解决方案是使它成为一个字符串指针。那看起来像这样:
type Result struct {
Foo *string
}
如果你不喜欢nil,你也可以添加一个布尔字段来解释是否Foo存在:
type Result struct {
Foo string
IsPresent bool // true if Foo is present. false otherwise.
}
但是您需要为此编写自定义 JSON 反序列化器。所以Foo我会做的就是做一个指针。
在问题更改为提及 OP 已经在使用后进行编辑*string:
要从 JSON 字符串转到{ "Foo" : null }我Result的回答中上面列出的 Go 结构,可以使用jsonpackage函数:Unmarshal
var r Result
err := json.Unmarshal([]byte(`{ "Foo" : null }`), &r)
if err != nil { /* ... */ }
// now f contains the desired data
要从Result结构转换为上述 JSON 字符串,可以使用json库函数:Marshal
var r Result // Foo will be zero'd to nil
jsonStr, err := json.Marshal(&r)
if err != nil { /* ... */ }
// now jsonStr contains `{ "Foo" : null }`
下面是在Go Playground中运行的上述两个代码块。
- 1 回答
- 0 关注
- 153 浏览
添加回答
举报