首页 > 后端开发 > Golang > 如何展平包含 sql.NullString 的 Go 结构的 JSON 输出?

如何展平包含 sql.NullString 的 Go 结构的 JSON 输出?

Mary-Kate Olsen
发布: 2024-12-02 19:20:13
原创
675 人浏览过

How to Flatten JSON Output from a Go struct containing sql.NullString?

编组 sql.NullString 以实现扁平化输出

问题

给定一个包含 sql.NullString 的 Go 结构,使用encoding/json 编组该结构会产生嵌套对象而不是所需的展平对象

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

例如,编组这样的结构会产生如下输出:

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

但是,所需的输出被展平:

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

解决方案

通过定义新类型来自定义 NullString 类型的 MarshalJSON 方法可以实现更多功能受控输出。

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"`
}
登录后复制

通过实现 json.Marshaler 接口,MyNullString 类型可以控制它如何表示为 JSON。当它为非空时,它返回底层字符串,对于空值,它返回一个文字“空”字符串。

代码游乐场中提供的示例演示了所需的行为:

https://play.golang.org/p/Ak_D6QgIzLb
登录后复制

此解决方案通过忽略 Valid 字段并直接返回字符串值来展平输出。

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

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