[解決済み】構造体からフィールドを削除したり、JSONレスポンスでフィールドを隠したりする方法
質問
GoでAPIを作成しました。呼び出されると、クエリを実行し、構造体のインスタンスを作成し、その構造体をJSONとしてエンコードしてから呼び出し元に送り返します。 呼び出し元が、GET パラメータに "fields" を渡すことによって、返したい特定のフィールドを選択できるようにしたいと思います。
つまり、fieldsの値によって、私の構造体が変化することになります。 構造体からフィールドを削除する方法はありますか? または、少なくともJSON応答で動的に隠す方法はありますか? 注:時々、空の値があるので、JSON omitEmptyタグはここでは機能しません)どちらも不可能な場合、これを処理する良い方法について提案はありますか?
私が使っている構造体の縮小版は以下の通りです。
type SearchResult struct {
Date string `json:"date"`
IdCompany int `json:"idCompany"`
Company string `json:"company"`
IdIndustry interface{} `json:"idIndustry"`
Industry string `json:"industry"`
IdContinent interface{} `json:"idContinent"`
Continent string `json:"continent"`
IdCountry interface{} `json:"idCountry"`
Country string `json:"country"`
IdState interface{} `json:"idState"`
State string `json:"state"`
IdCity interface{} `json:"idCity"`
City string `json:"city"`
} //SearchResult
type SearchResults struct {
NumberResults int `json:"numberResults"`
Results []SearchResult `json:"results"`
} //type SearchResults
そして、このようなレスポンスをエンコードして出力しています。
err := json.NewEncoder(c.ResponseWriter).Encode(&msg)
解決方法は?
この質問では、フィールドを 動的に は、呼び出し元が提供するフィールドのリストに基づいて選択されます。これは、静的に定義されたjson構造体タグでは不可能です。
もし、あなたが欲しいものが
常に
フィールドをスキップして json-encode する場合は、当然ながら
json:"-"
を使用すると、そのフィールドを無視することができます。(なお、これは
ではなく
これらのフィールドは、json エンコーダーによって常に無視されます)。これは質問の内容とは異なります。
のコメントを引用すると
json:"-"
の答えになります。
これ【は
json:"-"
回答]は、検索してここにたどり着いた人の多くが望む答えですが、質問の答えにはなっていません。
私なら
map[string]interface{}
この場合、構造体の代わりに を呼び出すと、簡単にフィールドを削除できます。
delete
を、削除するフィールドのマップに組み込みました。
つまり、そもそも要求されたフィールドのみを問い合わせることができない場合です。
関連
-
[解決済み] JSON文字列を構造体に変換する方法
-
[解決済み] PHPスクリプトからJSONを返す
-
[解決済み] JSON APIのレスポンス形式には規格がありますか?
-
[解決済み] FlaskのビューからJSONレスポンスを返す
-
[解決済み] DjangoとPythonを使ったJSONレスポンスの作成
-
[解決済み】REST APIでのPUTメソッドとPATCHメソッドの使い分け 実生活でのシナリオ
-
[解決済み】Goの構造体をJSONに変換する
-
[解決済み】JSONの構文では、オブジェクト内のキーの重複は許されるのか?
-
[解決済み】ASP.Net MVCでAccess-Control-Allow-Originを設定する - 最もシンプルな方法
-
[解決済み] http.Getから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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Angular: 'Cannot find a differ supporting object '[object Object]' of type 'object'. NgForはArrayのようなIterableへのバインディングのみをサポートしています'。
-
[解決済み] JSON文字列を構造体に変換する方法
-
[解決済み] JSONPathで文字列によるフィルタリングを行うには?
-
[解決済み] PandasのDataFrameをJSON形式に変換する
-
[解決済み] JSON文字列をjqを使用してテーブルとしてフォーマットする方法は?
-
[解決済み】文字列のJSON配列はどのように表現するのですか?
-
[解決済み】JSONデータからJSONスキーマを生成するツール【終了しました
-
[解決済み】application/jsonとapplication/x-www-form-urlencodedの違いは何ですか?
-
[解決済み】ECMAScript 6でJSONファイルをインポートする方法は?
-
[解決済み】SwiftでJSONファイルを読み込む