golangの構造体からjsonオブジェクトを手動で作成する

WBOY
リリース: 2024-02-12 11:03:08
転載
1065 人が閲覧しました

golangの構造体からjsonオブジェクトを手動で作成する

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>
ログイン後にコピー

回避策

実行時にタグを変更することはできませんが、

$$c を使用して実行時に構造体型を作成することはできます$$reflect.StructOf()

したがって、構造体の型をコピーし、複製内の JSON タグから ,omitempty

オプションを除外するというアイデアです。

以下のすべての例は、Go Playground

で見つけることができます。

これは人々が最初に考えるよりも簡単です。これを再帰的に行う必要があるだけであり (ある構造体フィールドが別の構造体である可能性があります)、必ずポインターを処理する必要があります。 リーリー このタイプでテストしてみましょう:

リーリー

まず、型の重複を除いた JSON 出力を次に示します。

リーリー

出力:

リーリー

Bar

フィールドと

Baz

フィールドは構造体であるため、これらのフィールドが取得されることに注意してください。 copy と入力してみましょう: リーリー これは出力します:

リーリー ###良い!まさに私たちが望んでいたものです!

しかし、まだ終わっていません。構造体ポインターフィールドを持つ型がある場合はどうなるでしょうか?このような:### リーリー

繰り返し型の値を JSON マーシャリングしようとします:

リーリー

出力:

リーリー

構造体にポインターが含まれている場合、これらのポインターは JSON 出力に

null

として表示されますが、そのフィールドも出力に表示したいと考えています。これには、出力を生成するために、非

nil

値に初期化する必要があります。

幸いなことに、これを行うためにリフレクションを使用することもできます。 リーリー ###私たちは興奮しています!実際に動作を見てみましょう: リーリー 出力: リーリー ###良い!すべてのフィールドが含まれています。

以上がgolangの構造体からjsonオブジェクトを手動で作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!