JSON 中处理 int64 类型的 Null 值:Go 语言实践

JSON 中处理 int64 类型的 Null 值:Go 语言实践

go 语言中使用 encoding/json 包解析 JSON 数据时,经常会遇到 int64 类型的字段值为 null 的情况。直接将 null 值 unmarshal 到 int64 类型的变量会导致错误,因为 int64 类型无法表示 null。本文将介绍一种有效的解决方案:使用 *int64 指针类型。

使用 *int64 指针类型

Go 语言中的指针类型可以表示一个值的地址,也可以为 nil。 因此,我们可以使用 *int64 类型来表示一个可能为 null 的 int64 值。 当 JSON 中的值为 null 时,*int64 类型的变量会被 unmarshal 为 nil;当 JSON 中的值为一个有效的 int64 数字时,*int64 类型的变量会指向一个包含该数字的 int64 值。

下面是一个示例代码:

package main  import (     "encoding/json"     "fmt" )  var d = []byte(`{ "world":[{"data": 2251799813685312}, {"data": null}]}`)  type jsonobj struct {     World []World }  type World struct {     Data *int64 `json:"data"` }  func main() {     var data jsonobj     jerr := json.Unmarshal(d, &data)     fmt.Println(jerr)     fmt.Println(data)      // 访问数据     for _, w := range data.World {         if w.Data == nil {             fmt.Println("Data is null")         } else {             fmt.Println("Data:", *w.Data) // 注意:需要解引用指针         }     } }

代码解释:

  1. *`type World struct { Data int64 `json:”data”` }**: 我们将Data字段的类型从int64修改为*int64。json:”data”tag 确保 JSON 解析器能正确地将 JSON 中的 “data” 字段 unmarshal 到Data` 字段。
  2. if w.Data == nil { … } else { … }: 在访问 Data 字段的值之前,我们需要检查它是否为 nil。 如果是 nil,则表示 JSON 中的值为 null。
  3. *`fmt.Println(“Data:”, w.Data)**: 如果Data字段不为nil,则我们需要使用*` 运算符来解引用指针,以获取实际的 int64 值。

运行结果:

JSON 中处理 int64 类型的 Null 值:Go 语言实践

Brev AI

Brev.ai:搭载Suno AI V3.5技术的免费AI音乐生成器

JSON 中处理 int64 类型的 Null 值:Go 语言实践125

查看详情 JSON 中处理 int64 类型的 Null 值:Go 语言实践

<nil> {[{0x1400011a000} {<nil>}]} Data: 2251799813685312 Data is null

可以看到,null 值被成功地 unmarshal 为 nil,并且我们可以通过判断指针是否为 nil 来确定 JSON 中的值是否为 null。

注意事项

  • 解引用指针前必须检查 nil: 在使用 *int64 类型的变量之前,务必先检查它是否为 nil,否则会导致 panic。

  • 默认值: 如果希望将 null 值转换为特定的默认值(例如 -1),可以在 unmarshal 后进行手动处理。 例如:

    for i := range data.World {     if data.World[i].Data == nil {         defaultValue := int64(-1)         data.World[i].Data = &defaultValue     } }

总结

使用 *int64 指针类型是处理 JSON 中 int64 类型字段值为 null 的一种有效方法。 它可以让我们在 Go 语言中优雅地处理 null 值,并避免 unmarshal 错误。 通过本文提供的示例代码和注意事项,相信你能够更好地处理 JSON 数据中的 null 值。

js json go ai json NULL 运算符 if 指针 指针类型 Struct nil

上一篇
下一篇
text=ZqhQzanResources