ホームページ >バックエンド開発 >Golang >Go で、あるタグ セットで JSON をアンマーシャリングし、別のタグでマーシャリングするにはどうすればよいですか?

Go で、あるタグ セットで JSON をアンマーシャリングし、別のタグでマーシャリングするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-03 14:40:40409ブラウズ

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} を構造体 Foo に追加し、employee_name と - のタグを含む変更バージョンを作成して別のサーバーに送信します。

ただし、複数の JSON タグを構造体 Foo に割り当てると便利です。あなたが提案した単一フィールドですが、これは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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。