首页 > 后端开发 > Golang > 如何在 Go 中展平编组 sql.NullString 的输出?

如何在 Go 中展平编组 sql.NullString 的输出?

Barbara Streisand
发布: 2024-11-28 07:58:14
原创
304 人浏览过

How to Flatten the Output of a Marshalled sql.NullString in Go?

如何在 Go 中从编组的 sql.NullString 中展平并仅输出值?

给定一个带有 sql.NullString 字段的 Golang 结构体,默认编组行为会导致输出,其中字段嵌套在带有 String 和 Valid 键的 JSON 对象内。要实现仅包含 NullString 值的扁平化输出,请按照下列步骤操作:

1.定义自定义类型:

创建一个嵌入 sql.NullString 并实现 json.Marshaler 接口的自定义类型。

type MyNullString struct {
    sql.NullString
}
登录后复制

2.实现 MarshalJSON 方法:

在 MyNullString 内,实现 MarshalJSON 方法以提供自定义 JSON 编组行为。

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

3.修改结构体:

结构体中需要展平的字段使用自定义的 MyNullString 类型。

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

示例:

package main

import (
    "database/sql"
    "encoding/json"
    "log"
)

type MyNullString struct {
    sql.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"`
}

func main() {
    company := Company{
        ID:   68,
        Abn:  MyNullString{String: "SomeABN", Valid: true},
    }

    result, err := json.Marshal(company)
    if err != nil {
        log.Fatal(err)
    }

    // Output: {"id":68,"abn":"SomeABN"}
    log.Println(string(result))
}
登录后复制

通过以下步骤,您可以有效地展平 sql.NullString 字段的输出并仅获取编组 JSON 中的值。

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

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