[解決済み] Goで空の構造体をJSONにマーシャルしない方法とは?
2022-09-11 04:36:38
質問
このような構造体を持っています。
type Result struct {
Data MyStruct `json:"data,omitempty"`
Status string `json:"status,omitempty"`
Reason string `json:"reason,omitempty"`
}
しかし、MyStructのインスタンスが完全に空であっても(つまり、すべての値がデフォルトであっても)、シリアライズされるのは、以下のようになります。
"data":{}
というのは知っていますが エンコーディング/json docs は "empty" フィールドがそうであると指定しています。
false、0、任意のnilポインタまたはインタフェース値、および任意の配列。 スライス、マップ、または長さ0の文字列。
のように、すべての値が空またはデフォルトである構造体は考慮されません。また、そのすべてのフィールドは、タグ付けされています。
omitempty
でタグ付けされていますが、これは何の効果もありません。
どうすれば、JSON パッケージを ではなく をマーシャリングさせることができますか?
どのように解決するのですか?
ドキュメントにあるように、"any nil pointer." -- 構造体をポインタにします。ポインタは明らかに "empty" の値を持っています。
nil
.
修正 - 構造体を用いて型を定義する ポインタ フィールドで型を定義します。
type Result struct {
Data *MyStruct `json:"data,omitempty"`
Status string `json:"status,omitempty"`
Reason string `json:"reason,omitempty"`
}
では、このような値。
result := Result{}
としてマーシャリングされます。
{}
説明 この
*MyStruct
に注目してください。JSONのシリアライゼーションでは、ポインタであるかどうかは気にしませんが、それはランタイムの詳細です。つまり、構造体フィールドをポインタにすることは、コンパイル時と実行時にのみ意味があります)。
ただ、フィールドの型を
MyStruct
から
*MyStruct
のように、構造体へのポインタが必要です。
Data: &MyStruct{ /* values */ }
関連
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み] JSONファイルをprettyprintする方法は?
-
[解決済み] JSONデータをファイルに書き込むにはどうしたらいいですか?
-
[解決済み] JSON文字列を安全にオブジェクトに変換する
-
[解決済み] JSONをC#のダイナミックオブジェクトにデシリアライズする?
-
[解決済み] Express アプリケーションで JSON POST データを消費する方法
-
[解決済み】「datetime.datetime not JSON serializable」を克服する方法とは?
-
[解決済み】構造体からフィールドを削除したり、JSONレスポンスでフィールドを隠したりする方法
-
[解決済み] react nativeでローカルのJSONファイルからデータを取得するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Kubernetes / kubectl - 「コンテナ名を指定する必要があります」とありますが、そのような感じですか?
-
[解決済み] マニフェスト 行: 1, 列: 1, 構文エラー
-
[解決済み] Chromeを使用してASP.NET Web APIがXMLの代わりにJSONを返すようにするにはどうすればよいですか?
-
[解決済み] バイナリデータをJSON文字列で。Base64より優れたもの
-
[解決済み】GoのJSONマーシャルでJSONのキー名を小文字にする
-
[解決済み] JSONファイルのMongoimport
-
[解決済み] JSONファイルからRにデータをインポートする【重複あり
-
[解決済み] SwiftでJSON辞書の型を持つプロパティをデコードする方法 [45] デコード可能なプロトコル
-
[解決済み] ネストされたJSONオブジェクトのアンマーシャリング
-
[解決済み] JSONオブジェクトをBufferに変換し、BufferをJSONオブジェクトに戻す。