首頁 > 後端開發 > Golang > 如何在 Go 中對單一結構體欄位使用多個 JSON 標籤?

如何在 Go 中對單一結構體欄位使用多個 JSON 標籤?

Mary-Kate Olsen
發布: 2024-12-17 03:25:25
原創
419 人瀏覽過

How to Use Multiple JSON Tags for a Single Struct Field in Go?

結構體欄位的多個JSON 標籤

在從伺服器接收JSON 資料並需要將其解組到結構體的場景中,您可能會遇到這樣的情況:您想要使用不同的JSON標籤來表示相同的資料

自訂 JSON 標籤

JSON 標籤指定 JSON 表示中使用的欄位名稱。預設情況下,欄位的標籤與欄位名稱相同。但是,您可以自訂標籤以變更序列化或反序列化結構時使用的名稱。

單一 JSON 標籤

使用單一 JSON 標籤非常簡單。只需將所需的標籤指定為字串文字:

type Foo struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}
登入後複製

多個JSON 標籤

如問題中所述,不可能將多個JSON標籤直接附加到單一字段。但是,有一種技術可以讓您解決此限制。

結構體轉換

給定的解決方案建議使用兩個具有相同字段佈局的結構體。例如:

type Foo struct {
    Name string
    Age  int
}

type Bar struct {
    Name string `json:"employee_name"`
    Age  int    `json:"-"`
}
登入後複製

然後,您可以將 Foo 結構轉換為 Bar 結構以變更 JSON 標籤。當您有大量欄位時,此技術特別有用:

foo := Foo{Name: "Sam", Age: 20}
bar := (*Bar)(unsafe.Pointer(&foo))
登入後複製

注意

請務必注意,應取消匯出第二個結構以防止這種情況防止在當前包之外被存取。這可確保僅按預期執行轉換,而不會意外誤用。

範例

以下程式碼示範了上述轉換技術:

package main

import (
    "encoding/json"
    "fmt"
)

type Foo struct {
    Name string
    Age  int
}

type Bar struct {
    Name string `json:"employee_name"`
    Age  int    `json:"-"`
}

func main() {
    foo := Foo{Name: "Sam", Age: 20}
    bar := (*Bar)(unsafe.Pointer(&foo))

    jsonBytes, err := json.Marshal(bar)
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println(string(jsonBytes))
}
登入後複製

此程式碼使用Bar 結構中定義的JSON 標籤成功序列化Foo結構資料。它產生以下 JSON 輸出:

{"employee_name":"Sam"}
登入後複製

以上是如何在 Go 中對單一結構體欄位使用多個 JSON 標籤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板