首页 > 后端开发 > Golang > 如何使用 Go 类型转换处理 JSON 中的 SQL NULL 值?

如何使用 Go 类型转换处理 JSON 中的 SQL NULL 值?

Susan Sarandon
发布: 2024-12-22 01:31:18
原创
400 人浏览过

How to Handle SQL NULL Values in JSON using Go Type Conversions?

使用 Go 类型转换对 SQL NULL 值进行 JSON 处理

虽然 Int64 和 String 等 Go 类型无法存储 null 值,但可以使用 sql.NullInt64 sql.NullString 允许此功能。然而,与常规 Int64 和 String 类型相比,使用 json 包将这些类型编码为 JSON 会导致格式发生变化。

出现这种差异是因为 sql.Null* 类型本身就是结构体,导致JSON 表示中的附加嵌套级别。为了克服这一问题,可以实现遵循 json.Marshaller 和 json.Unmarshaler 接口的自定义类型。

例如,可以定义 JsonNullInt64 类型,嵌入 sql.NullInt64 类型并实现自定义 JSON 处理:

type JsonNullInt64 struct {
    sql.NullInt64
}

func (v JsonNullInt64) MarshalJSON() ([]byte, error) {
    if v.Valid {
        return json.Marshal(v.Int64)
    } else {
        return json.Marshal(nil)
    }
}

func (v *JsonNullInt64) UnmarshalJSON(data []byte) error {
    // Pointer unmarshalling ensures NULL detection
    var x *int64
    if err := json.Unmarshal(data, &x); err != nil {
        return err
    }
    if x != nil {
        v.Valid = true
        v.Int64 = *x
    } else {
        v.Valid = false
    }
    return nil
}
登录后复制

用 sql.NullInt64 替换JsonNullInt64 产生所需的 JSON 编码。如需进一步测试,请参阅此游乐场:http://play.golang.org/p/zFESxLcd-c

以上是如何使用 Go 类型转换处理 JSON 中的 SQL NULL 值?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板