首頁 > 後端開發 > Golang > 如何在 Go 中動態控制 JSON 回應欄位?

如何在 Go 中動態控制 JSON 回應欄位?

Barbara Streisand
發布: 2024-12-11 00:30:10
原創
709 人瀏覽過

How to Dynamically Control JSON Response Fields in Go?

動態刪除或隱藏 JSON 回應中的欄位

使用 API 回應時,控制傳回的特定欄位通常很有用來電者。在 Go 中,結構體通常用於表示編碼為 JSON 的資料。但是,靜態定義的結構體標籤可能無法提供足夠的彈性來動態刪除或隱藏特定欄位。

從結構體中刪除欄位

動態刪除欄位是不可能的來自 Go 中的結構。在結構體中聲明的欄位永久是類型定義的一部分。

在 JSON 回應中隱藏欄位

JSON omitempty 標籤可用於隱藏 JSON 回應中的空白欄位JSON 回應。但是,這種方法不適合需要隱藏非空白欄位的情況。

使用映射而不是結構

動態控制包含的字段的一種方法響應中是使用map[string]interface{}。映射是鍵值對的無序集合。您可以使用刪除內建函數從地圖中刪除欄位。

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 並傳回給呼叫者。

替代方法

另一種替代方法是僅在資料庫中查詢請求的欄位。此方法需要修改 SQL 查詢以僅包含所需的欄位。雖然這種方法更有效,但並非在所有情況下都可行。

以上是如何在 Go 中動態控制 JSON 回應欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板