Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Kawal Secara Dinamik Medan Respons JSON dalam Go?

Bagaimana untuk Kawal Secara Dinamik Medan Respons JSON dalam Go?

Barbara Streisand
Barbara Streisandasal
2024-12-11 00:30:10651semak imbas

How to Dynamically Control JSON Response Fields in 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn