首页 > 后端开发 > Golang > 在 Go 中封送 JSON 时如何展平 sql.NullString 输出?

在 Go 中封送 JSON 时如何展平 sql.NullString 输出?

Barbara Streisand
发布: 2024-11-30 02:18:10
原创
222 人浏览过

How to Flatten sql.NullString Output When Marshaling JSON in Go?

在 JSON 封送期间展平 sql.NullString 输出

当封送包含 sql.NullString 字段的 Go 结构时,默认输出包括该字段的有效属性和字符串属性。要实现仅包含值的扁平化输出,您必须采取额外的步骤。

考虑以下结构:

type Company struct {
    ID   int             `json:"id"`              
    Abn  sql.NullString  `json:"abn,string"`
}
登录后复制

使用 json.Marshal 编组此结构会生成如下所示的输出:

{
    "id": "68",
    "abn": {
        "String": "SomeABN",
        "Valid": true
    }
}
登录后复制

为自定义 JSON 扩展 sql.NullString编组

要展平此输出,您必须扩展 sql.NullString 并实现 json.Marshaler。

type NullString sql.NullString

func (x *NullString) MarshalJSON() ([]byte, error) {
    if !x.Valid {
        x.Valid = true
        x.String = ""
        //return []byte("null"), nil
    }
    return json.Marshal(x.String)
}
登录后复制

为展平输出定义自定义类型

接下来,定义一个嵌入扩展 NullString 并实现的自定义类型json.Marshaler.

type MyNullString struct {
    NullString
}

func (s MyNullString) MarshalJSON() ([]byte, error) {
    if s.Valid {
        return json.Marshal(s.String)
    }
    return []byte(`null`), nil
}

type Company struct {
    ID   int          `json:"id"`              
    Abn  MyNullString `json:"abn,string"`
}
登录后复制

通过使用此自定义类型,编组输出将变为:

{
    "id": "68",
    "abn": "SomeABN"
}
登录后复制

以上是在 Go 中封送 JSON 时如何展平 sql.NullString 输出?的详细内容。更多信息请关注PHP中文网其他相关文章!

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