Go で JSON 応答フィールドを動的に制御する方法
JSON 応答のフィールドを動的に削除または非表示にする
API 応答を操作する場合、返される特定のフィールドを制御すると便利なことがよくあります。電話をかけてきた人。 Go では、JSON にエンコードされたデータを表すために構造体がよく使用されます。ただし、静的に定義された構造体タグでは、特定のフィールドを動的に削除または非表示にするのに十分な柔軟性が提供されない場合があります。
構造体からのフィールドの削除
フィールドを動的に削除することはできません。 Go の構造体から。構造体で宣言されたフィールドは、永続的に型定義の一部です。
JSON 応答内のフィールドの非表示
JSON のomitempty タグを使用して、構造体の空のフィールドを非表示にできます。 JSON 応答。ただし、このアプローチは、空でないフィールドを非表示にする必要がある状況には適していません。
構造体の代わりにマップを使用する
含まれるフィールドを動的に制御する 1 つの方法レスポンスでは、map[string]interface{} を使用することになります。マップは、キーと値のペアの順序付けされていないコレクションです。 delete 組み込み関数を使用して、マップからフィールドを削除できます。
package main import ( "encoding/json" "fmt" ) type SearchResults struct { NumberResults int `json:"numberResults"` Results []map[string]interface{} `json:"results"` } func main() { // Assume we obtained the following map from a query result := map[string]interface{}{ "idCompany": 1, "company": "Acme Inc.", "industry": "Manufacturing", "idState": 5, "state": "New York", "country": "US", "otherField1": "Some Value 1", "otherField2": 2.3, } // Create a SearchResults struct searchResults := SearchResults{ NumberResults: 1, Results: []map[string]interface{}{result}, } // Remove any fields not specified in the `fields` GET parameter fields := []string{"idCompany", "company", "state"} for k, v := range searchResults.Results { for f := range v { if !contains(fields, f) { delete(v, f) } } } // Encode the modified SearchResults as JSON jsonBytes, _ := json.Marshal(searchResults) // Print the JSON fmt.Println(string(jsonBytes)) } func contains(s []string, e string) bool { for _, a := range s { if a == e { return true } } return false }
この例では、返されるフィールドは、fields GET パラメーターで指定されています。コードはマップを反復処理して、指定されたリストに含まれていないフィールドを削除します。最後に、変更されたマップは JSON としてエンコードされ、呼び出し元に返されます。
代替アプローチ
もう 1 つの代替方法は、要求されたフィールドについてのみデータベースにクエリを実行することです。この方法では、必要なフィールドのみを含めるように SQL クエリを変更する必要があります。この方法はより効率的ですが、すべての場合に実行可能であるとは限りません。
以上がGo で JSON 応答フィールドを動的に制御する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









OpenSSLは、安全な通信で広く使用されているオープンソースライブラリとして、暗号化アルゴリズム、キー、証明書管理機能を提供します。ただし、その歴史的バージョンにはいくつかの既知のセキュリティの脆弱性があり、その一部は非常に有害です。この記事では、Debian SystemsのOpenSSLの共通の脆弱性と対応測定に焦点を当てます。 Debianopensslの既知の脆弱性:OpenSSLは、次のようないくつかの深刻な脆弱性を経験しています。攻撃者は、この脆弱性を、暗号化キーなどを含む、サーバー上の不正な読み取りの敏感な情報に使用できます。

この記事では、プロファイリングの有効化、データの収集、CPUやメモリの問題などの一般的なボトルネックの識別など、GOパフォーマンスを分析するためにPPROFツールを使用する方法について説明します。

この記事では、GOでユニットテストを書くことで、ベストプラクティス、モッキングテクニック、効率的なテスト管理のためのツールについて説明します。

Go Crawler Collyのキュースレッドの問題は、Go言語でColly Crawler Libraryを使用する問題を調査します。 �...

バックエンド学習パス:フロントエンドからバックエンドへの探査の旅は、フロントエンド開発から変わるバックエンド初心者として、すでにNodeJSの基盤を持っています...

この記事では、GOプログラミングのGo FMTコマンドについて説明します。これは、公式スタイルのガイドラインに準拠するためのコードをフォーマットします。コードの一貫性、読みやすさ、およびスタイルの議論を削減するためのGO FMTの重要性を強調しています。 Best Practices fo

Beegoormフレームワークでは、モデルに関連付けられているデータベースを指定する方法は?多くのBEEGOプロジェクトでは、複数のデータベースを同時に操作する必要があります。 Beegoを使用する場合...
