首頁 >後端開發 >Golang >如何在 Go 中展平編組 sql.NullString 的輸出?

如何在 Go 中展平編組 sql.NullString 的輸出?

Barbara Streisand
Barbara Streisand原創
2024-11-28 07:58:14300瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn