JSON レスポンスでの動的フィールド選択
Go では、構造体から JSON データを返す API を作成できます。一般的な要件は、呼び出し元が返したい特定のフィールドを選択できるようにすることです。ただし、静的に定義された JSON 構造体タグは、動的なフィールド選択をサポートしません。
JSON でフィールドを非表示にする
考えられる解決策の 1 つは、json:"-" タグを使用することです。エンコード中に特定のフィールドをスキップします。ただし、これは常に除外される静的に定義されたフィールドに対してのみ機能します。これは、動的なフィールド選択の必要性には対応していません。
動的なフィールドの削除
より柔軟なアプローチには、構造体の代わりにマップ[文字列]インターフェイス{}を使用することが含まれます。 。これにより、マップ上の削除機能を使用してフィールドを動的に削除できます。この方法は、そもそもリクエストされたフィールドのみをクエリできない場合に特に便利です。
例:
import ( "encoding/json" "fmt" "net/http" ) type SearchResult struct { Date string IdCompany int Company string IdIndustry interface{} Industry string ... // other fields } type SearchResults struct { NumberResults int `json:"numberResults"` Results []SearchResult `json:"results"` } func main() { http.HandleFunc("/search", func(w http.ResponseWriter, r *http.Request) { // Get requested fields from query parameter fields := r.URL.Query()["fields"] results := SearchResults{ // Populate results... } // Remove unwanted fields from each result for i := range results.Results { for _, field := range fields { delete(results.Results[i], field) } } // Encode and output response err := json.NewEncoder(w).Encode(&results) if err != nil { http.Error(w, "Error encoding response", http.StatusInternalServerError) } }) }
この例では、fields パラメータは次のとおりです。 SearchResult 構造体を JSON としてエンコードする前にフィールドを動的に削除するために使用されます。このアプローチにより、呼び出し元の設定に基づいて柔軟なフィールド選択が可能になります。
以上がGo JSON レスポンスで動的フィールド選択を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。