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

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

Barbara Streisand
Barbara Streisand原创
2024-11-30 02:18:10246浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn