Heim > Backend-Entwicklung > Golang > Wie steuere ich JSON-Antwortfelder in Go dynamisch?

Wie steuere ich JSON-Antwortfelder in Go dynamisch?

Barbara Streisand
Freigeben: 2024-12-11 00:30:10
Original
646 Leute haben es durchsucht

How to Dynamically Control JSON Response Fields in Go?

Felder in JSON-Antworten dynamisch entfernen oder ausblenden

Bei der Arbeit mit API-Antworten ist es oft nützlich, die spezifischen Felder zu steuern, an die zurückgegeben wird der Anrufer. In Go werden Strukturen häufig zur Darstellung von Daten verwendet, die in JSON codiert sind. Allerdings bieten statisch definierte Struktur-Tags möglicherweise nicht genügend Flexibilität, um bestimmte Felder dynamisch zu entfernen oder auszublenden.

Felder aus einer Struktur entfernen

Es ist nicht möglich, Felder dynamisch zu entfernen aus einer Struktur in Go. Felder, die in einer Struktur deklariert sind, sind dauerhaft Teil der Typdefinition.

Ausblenden von Feldern in der JSON-Antwort

Mit dem JSON-Tag omitempty können leere Felder ausgeblendet werden eine JSON-Antwort. Dieser Ansatz eignet sich jedoch nicht für Situationen, in denen Sie nicht leere Felder ausblenden müssen.

Verwendung von Karten anstelle von Strukturen

Eine Möglichkeit, die enthaltenen Felder dynamisch zu steuern in der Antwort soll ein Map[string]interface{} verwendet werden. Karten sind ungeordnete Sammlungen von Schlüssel-Wert-Paaren. Sie können Felder mit der integrierten Funktion „Löschen“ aus einer Karte entfernen.

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
}
Nach dem Login kopieren

In diesem Beispiel werden die zurückzugebenden Felder im GET-Parameter „fields“ angegeben. Der Code durchläuft die Karte und entfernt alle Felder, die nicht in der angegebenen Liste enthalten sind. Abschließend wird die geänderte Karte als JSON codiert und an den Aufrufer zurückgegeben.

Alternativer Ansatz

Eine andere Alternative besteht darin, die Datenbank nur nach den angeforderten Feldern abzufragen. Bei diesem Ansatz muss die SQL-Abfrage so geändert werden, dass sie nur die gewünschten Felder enthält. Obwohl diese Methode effizienter ist, ist sie möglicherweise nicht in allen Fällen durchführbar.

Das obige ist der detaillierte Inhalt vonWie steuere ich JSON-Antwortfelder in Go dynamisch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage