golang では、構造体から json オブジェクトを手動で作成するのが一般的な操作です。 structをjson形式に変換することで、ネットワーク送信や保存などに簡単に利用することができます。この記事では、PHP エディター Banana が、golang の組み込みパッケージを使用してこの機能を実現する方法を紹介します。それだけでなく、構造体のネストされたフィールドを処理する方法と、特殊なタイプのフィールドを処理する方法についても説明します。初心者でも経験豊富な開発者でも、この記事では golang で json オブジェクトを簡単に作成するための詳細なガイダンスを提供します。はじめましょう!
言いたい構成があります
リーリーこのようなものを使用して簡単に json に変換できることがわかりました
リーリー空の json 文字列が返されます。
ただし、json 内に存在するすべてのフィールドと「null 値」を含む構造の json 表現を返すには、同じ構造を使用する必要があります。 (実際には、非常に大規模な構造なので、タグなしでコピーを保持することはできません)
最も簡単な方法は何ですか?
基本的に、jsonomitemptyタグを無視する構造のjsonマーシャルを作成する必要があります。
この JSON の作成は、効率的またはパフォーマンス的である必要はありません。
この種のタスクにはライブラリを使用したいと思いますが、私が見たほとんどのライブラリは、何らかの特別な形式を作成するか、またはomitemptyを尊重します。 ###編集:###
https://stackoverflow.com/a/77799949/2187510 を回答として選択し、デフォルト値を許可するために追加の作業を行います (そのコードを参照として使用します)リーリー
出力:
<code>type Foo struct { A string `json:",omitemtpy" } </code>
回避策
実行時にタグを変更することはできませんが、。 したがって、構造体の型をコピーし、複製内の JSON タグから ,omitempty
オプションを除外するというアイデアです。
以下のすべての例は、
Go Playground
これは人々が最初に考えるよりも簡単です。これを再帰的に行う必要があるだけであり (ある構造体フィールドが別の構造体である可能性があります)、必ずポインターを処理する必要があります。 リーリー このタイプでテストしてみましょう:
リーリーまず、型の重複を除いた JSON 出力を次に示します。
リーリー出力:
リーリー Barフィールドと
Baz フィールドは構造体であるため、これらのフィールドが取得されることに注意してください。
copy と入力してみましょう:
リーリー
これは出力します:
しかし、まだ終わっていません。構造体ポインターフィールドを持つ型がある場合はどうなるでしょうか?このような:### リーリー
繰り返し型の値を JSON マーシャリングしようとします:
リーリー出力:
リーリー構造体にポインターが含まれている場合、これらのポインターは JSON 出力に
nullとして表示されますが、そのフィールドも出力に表示したいと考えています。これには、出力を生成するために、非
nil値に初期化する必要があります。
幸いなことに、これを行うためにリフレクションを使用することもできます。
リーリー
###私たちは興奮しています!実際に動作を見てみましょう:
リーリー
出力:
リーリー
###良い!すべてのフィールドが含まれています。
以上がgolangの構造体からjsonオブジェクトを手動で作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。