首頁 > 後端開發 > Golang > 在 Go 中如何使用一組標籤解組 JSON 並使用另一組標籤進行編組?

在 Go 中如何使用一組標籤解組 JSON 並使用另一組標籤進行編組?

Barbara Streisand
發布: 2025-01-03 14:40:40
原創
450 人瀏覽過

How Can I Unmarshal JSON with One Set of Tags and Marshal with Another in Go?

使用多個JSON 標籤進行編組和解組

將JSON 資料解組到結構體時,每個欄位必須有一個對應的JSON 標籤來指定其對應的JSON 金鑰。但是,有時您可能需要建立一個具有相同資料但不同 JSON 標籤的新 JSON 檔案。

在您的情況下,您希望解組JSON {"name":"Sam","age": 20} 到struct Foo 中,然後建立一個帶有標籤employee_name 和- 的修改版本,以發送到另一台伺服器。

雖然將多個 JSON 標籤分配給單一欄位會很方便,如下所示你建議,Go 中的encoding/json 套件不支援這一點。相反,您可以利用未匯出的類型和轉換來實現所需的結果。

package main

import (
    "bytes"
    "encoding/json"
)

type Foo struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    data := []byte(`{"name":"Sam","age":20}`)

    // Unmarshal to Foo
    var foo Foo
    json.Unmarshal(data, &foo)

    // Create a new type with modified tags
    type Bar struct {
        Name string `json:"employee_name"`
        Age  int    `json:"-"`
    }

    // Cast from Foo to Bar
    bar := Bar(foo)

    // Marshal Bar
    buf := new(bytes.Buffer)
    json.NewEncoder(buf).Encode(bar)

    println(buf.String())
}
登入後複製

注意:此方法依賴未匯出的型別 Bar。使用未匯出的類型有助於防止程式碼庫中其他地方的意外使用。此外,請確保兩個結構中的欄位名稱、類型和順序完全匹配,以便轉換能夠正常運作。

以上是在 Go 中如何使用一組標籤解組 JSON 並使用另一組標籤進行編組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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