3 回答
TA贡献1828条经验 获得超4个赞
在json 包文档中:
指针值编码为指向的值。空指针编码为空 JSON 对象。
所以你可以存储一个指向字符串的指针,如果不是 nil,它将被编码为一个字符串,如果 nil 将被编码为“null”
type student struct {
FirstName *string `json:"first_name"`
MiddleName *string `json:"middle_name"`
LastName *string `json:"last_name"`
}
TA贡献1863条经验 获得超2个赞
另一种方法实际上是使用 golang 的 json 库提供的 MarhshalJSON 和 UnmarshalJSON 接口方法的解决方法。代码如下:
type MyType string
type MyStruct struct {
A MyType `json:"my_type"`
}
func (c MyType) MarshalJSON() ([]byte, error) {
var buf bytes.Buffer
if len(string(c)) == 0 {
buf.WriteString(`null`)
} else {
buf.WriteString(`"` + string(c) + `"`) // add double quation mark as json format required
}
return buf.Bytes(), nil
}
func (c *MyType)UnmarshalJSON(in []byte) error {
str := string(in)
if str == `null` {
*c = ""
return nil
}
res := MyType(str)
if len(res) >= 2 {
res = res[1:len(res)-1] // remove the wrapped qutation
}
*c = res
return nil
}
那么当使用 json.Marshal 时,MyType 值将被编组为 null。
- 3 回答
- 0 关注
- 190 浏览
添加回答
举报