ホームページ >バックエンド開発 >Golang >Go Structs で MongoDB と JSON エンコーディングに異なるフィールド名を使用するにはどうすればよいですか?

Go Structs で MongoDB と JSON エンコーディングに異なるフィールド名を使用するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-03 01:06:10782ブラウズ

How Can I Use Different Field Names for MongoDB and JSON Encoding in Go Structs?

MongoDB の構造体のタグ付けと JSON エンコーディングの制限を克服する

MongoDB データベースからデータにアクセスし、その後それを JSON にエンコードする場合、必要に応じて問題が発生する可能性があります。フォーマットごとに異なるフィールド名を使用します。たとえば、MongoDB には「pageId」という名前のフィールドが必要ですが、JSON で「pageId」としてエンコードすることもできます。

複数のタグの定義: 誤解された取り組み

構造体に複数の名前タグを定義しようとした最初の試みは失敗しました。タグ文字列区切り文字としてカンマを使用しようとしました:

type Page struct {
    PageId string                 `bson:"pageId",json:"pageId"`
    Meta   map[string]interface{} `bson:"meta",json:"pageId"`
}

しかし、このアプローチは正しくありません。

成功への道: 宇宙の力を解き放つ

構造体内で複数の名前タグを正常に定義するには、タグ文字列の区切り文字としてスペースを使用する必要があります。その方法は次のとおりです:

type Page struct {
    PageId string                 `bson:"pageId" json:"pageId"`
    Meta   map[string]interface{} `bson:"meta" json:"meta"`
}

理論的根拠を理解する

reflect パッケージのドキュメントには、タグ文字列は空ではない文字列で構成する必要があると明確に記載されています。キーと値のペア。各キーと値のペアはスペースで区切られ、値は Go 文字列リテラル構文を使用して引用符で囲まれます。

Each value is quoted using U+0022 '"' characters and Go string literal syntax.

この規則に従うことで、構造体に複数の名前タグを効果的に定義し、目的のエンコーディングを実現できます。行動。

以上がGo Structs で MongoDB と JSON エンコーディングに異なるフィールド名を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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