Golang を使用して開発する場合、非常に一般的な要件は、保存または送信のためにデータを JSON 形式に変換することです。 JSON は軽量で読み書きが容易なデータ形式であり、Web アプリケーションやモバイル アプリケーションで広く使用されています。ただし、場合によっては、JSON データの可読性を高めたり、特定のフィールドの意味を説明したりするために、JSON データに注釈を追加する必要がある場合があります。また、JSON 標準自体は注釈をサポートしていません。この記事では、Golang で JSON コメントを挿入するいくつかの方法を紹介します。
方法 1: 構造タグを使用する
Golang では、通常、構造タグ (タグ) を使用して、JSON 内のフィールドのマッピング関係を定義します。たとえば、json:"username"
を使用して、構造体フィールド Name
を JSON の username
フィールドにマッピングできます。実際、構造タグ内でコメントを使用することができます。コメントの前に json:"-"
を追加するだけです。
type User struct { Name string `json:"username"` // 用户名 Password string `json:"password"` // 密码 }
上の例では、//
を使用してコメントを追加し、各フィールドの意味を説明します。 User
構造を JSON に変換する場合、コメントは出力に影響しません。ただし、JSON を構造にデコードする場合、コメントは無視されるため、コードの厳密さには適していません。
方法 2: コメント文字列を使用する
もう 1 つの方法は、JSON にコメント文字列を追加することです。このコメント文字列は通常、JSON フィールドの値の前に配置されます。たとえば、次の JSON データにコメントを追加できます。
{ "user": { "name": "alice", // 用户名 "password": "123456" // 密码 } }
Golang では、json.RawMessage
型を使用して JSON の文字列値を表すことができます。この型はエスケープされていない JSON 文字列を保存でき、デコード時に何も行いません。コメント文字列を json.RawMessage
に保存して、JSON に追加できます。
これは例です:
type User struct { Name string `json:"-"` // 不输出 Password string `json:"-"` // 不输出 Comment string `json:"comment"` // 注释 } u := User{ Name: "alice", Password: "123456", Comment: `{ "//username": "用户名", "//password": "密码" }`, } data, err := json.Marshal(u) if err != nil { log.Fatal(err) } fmt.Println(string(data))
上の例では、ユーザーのユーザー名とパスワードのフィールドを -
としてマークし、それらが JSON に出力されないことを示します。コメント文字列は、Comment
フィールドに保存されます。構造体 u
を JSON 形式に変換する場合、json.Marshal
関数を使用して JSON 文字列に変換します。最後に、JSON 文字列をコンソールに出力すると、JSON データ内のコメントが有効になっていることがわかります。
JSON データをデコードするときは、Comment
フィールドのコメント文字列を手動で解析し、その内容に基づいて JSON データを解釈する必要があることに注意してください。これによりコードは複雑になりますが、現在実現可能な解決策の 1 つでもあります。
方法 3: サードパーティ ライブラリを使用する
最後に、既製のサードパーティ ライブラリを使用して JSON コメントを挿入できます。現在、json-iterator/go
や easyjson
など、コメントの追加をサポートする Golang JSON ライブラリがいくつかあります。これらのライブラリは、JSON 形式に影響を与えることなくコメントの追加をサポートしており、非常に簡単にコメントを追加できます。使うと便利です。
次は、json-iterator/go
ライブラリを使用してアノテーションを追加する例です:
import "github.com/json-iterator/go" type User struct { Name string `json:"username"` // 用户名 Password string `json:"password"` // 密码 } u := User{ Name: "alice", Password: "123456", } json := jsoniter.ConfigCompatibleWithStandardLibrary data, err := json.Marshal(u) if err != nil { log.Fatal(err) } fmt.Println(json.Get(data, "username").Last().GetInterface())
上の例では、jsoniter.ConfigCompatibilityWithStandardLibrary# を使用します。 ## JSON オブジェクトを作成し、
Marshal 関数を使用して構造体
u を JSON 文字列に変換します。最後に、
json.Get 関数を使用して JSON から指定されたフィールドを取得し、
GetInterface 関数を使用してそれを Golang オブジェクトに変換します。ここでは、ユーザー名フィールドに対応するコメント文字列をコンソールに出力しています。コメントが正常に追加されており、コードは比較的単純であることがわかります。
以上がgolang json コメントを挿入の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。