处理json响应中的NULL值



我对Go中json空值的处理感到困惑。假设我有以下例子:

package main
import (
"fmt"
"encoding/json"
"log"
)
type Fruit struct {
Name    string
Price   int
Owner   string  
}


func main() {
jsonData := []byte(`
{
"Name": "Standard",
"Price" : null,
"Owner": null
}`)
var f Fruit
err := json.Unmarshal(jsonData, &f)
if err != nil {
log.Println(err)
}
fmt.Printf("Name is : %snPrice is : %dnOwner is : %sn", f.Name, f.Price, f.Owner)
if f.Owner == ""  {
fmt.Printf("Name should be nil?n")
}
if f.Price == 0  {
fmt.Printf("Price should be nil?n")
}
}

现在,我的主要问题是:

区分零值和默认值的正确方法是什么

例如,在下面的例子中,我无法知道水果的价格是没有设定的,还是实际价格为零。

你们是怎么处理的?

在其他语言中,字符串和int都可以为null,但Go中的情况并非如此。

使用指针:

type Fruit struct {
Name    *string `json:"Name,omitempty"`
Price   *int     `json:"Price,omitempty"`
Owner   *string  `json:"Owner,omitempty"`
}

然后,您可以检查字段是否为零,或者它是否有值。

但是,如果您想区分文档中存在字段并设置为null和该字段根本不存在的情况,这对您没有帮助。

相关内容

  • 没有找到相关文章

最新更新