Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Kawal Secara Dinamik Medan Respons JSON dalam Go?
Mengalih Keluar atau Menyembunyikan Medan Secara Dinamik dalam Respons JSON
Apabila bekerja dengan respons API, selalunya berguna untuk mengawal medan khusus yang dikembalikan kepada pemanggil. Dalam Go, struct biasanya digunakan untuk mewakili data yang dikodkan ke dalam JSON. Walau bagaimanapun, teg struct yang ditakrifkan secara statik mungkin tidak memberikan fleksibiliti yang mencukupi untuk mengalih keluar atau menyembunyikan medan tertentu secara dinamik.
Mengalih keluar Medan daripada Struktur
Tidak mungkin mengalih keluar medan secara dinamik daripada struct dalam Go. Medan yang diisytiharkan dalam struct adalah sebahagian daripada definisi jenis secara kekal.
Menyembunyikan Medan dalam JSON Response
Teg JSON omitempty boleh digunakan untuk menyembunyikan medan kosong dalam respons JSON. Walau bagaimanapun, pendekatan ini tidak sesuai untuk situasi di mana anda perlu menyembunyikan medan bukan kosong.
Menggunakan Peta Daripada Struktur
Satu cara untuk mengawal medan yang disertakan secara dinamik dalam tindak balas adalah menggunakan peta[rentetan]antara muka{}. Peta ialah koleksi tidak tertib pasangan nilai kunci. Anda boleh mengalih keluar medan daripada peta menggunakan fungsi padam terbina dalam.
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 }
Dalam contoh ini, medan yang akan dikembalikan dinyatakan dalam parameter GET medan. Kod ini berulang pada peta, mengalih keluar mana-mana medan yang tidak termasuk dalam senarai yang ditentukan. Akhir sekali, peta yang diubah suai dikodkan sebagai JSON dan dikembalikan kepada pemanggil.
Pendekatan Alternatif
Alternatif lain ialah menanyakan pangkalan data hanya untuk medan yang diminta. Pendekatan ini memerlukan pengubahsuaian pertanyaan SQL untuk memasukkan hanya medan yang dikehendaki. Walaupun kaedah ini lebih cekap, ia mungkin tidak boleh dilaksanakan dalam semua kes.
Atas ialah kandungan terperinci Bagaimana untuk Kawal Secara Dinamik Medan Respons JSON dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!