Heim > Backend-Entwicklung > Golang > Wie konvertiert man eine Go-Struktur mithilfe von JSON-Tags effizient in eine Karte?

Wie konvertiert man eine Go-Struktur mithilfe von JSON-Tags effizient in eine Karte?

Susan Sarandon
Freigeben: 2024-12-11 18:41:10
Original
242 Leute haben es durchsucht

How to Efficiently Convert a Go Struct to a Map Using JSON Tags?

Funktion zum Konvertieren einer Struktur in eine Karte in Golang

Frage:

Wie kann Ich konvertiere eine Struktur effizient in eine Karte in Golang und verwende dabei JSON-Tags als Schlüssel möglich?

Antwort:

Bibliothek von Drittanbietern:

Das Paket structs von Fatih bietet hierfür eine unkomplizierte und umfassende Lösung Aufgabe:

func Map(object interface{}) map[string]interface{}
Nach dem Login kopieren

Verwendung:

package main

import (
    "fmt"

    "github.com/fatih/structs"
)

type Server struct {
    Name    string `json:"name"`
    ID      int32  `json:"id"`
    Enabled bool   `json:"enabled"`
}

func main() {
    s := &Server{
        Name:    "gopher",
        ID:      123456,
        Enabled: true,
    }

    m := structs.Map(s)
    fmt.Println(m) // Output: {"name":"gopher", "id":123456, "enabled":true}
}
Nach dem Login kopieren

Funktionen:

  • Unterstützt anonyme und verschachtelte Strukturen
  • Verwendet JSON-Tags für Schlüssel
  • Ermöglicht das Filtern von Feldern mithilfe von Tags

Benutzerdefinierte Implementierung:

Wenn eine benutzerdefinierte Implementierung bevorzugt wird, kann „reflect.Struct“ verwendet werden :

func ConvertToMap(model interface{}) map[string]interface{} {
    // Get the reflect type and value of the model
    modelType := reflect.TypeOf(model)
    modelValue := reflect.ValueOf(model)
    
    if modelValue.Kind() == reflect.Ptr {
        modelValue = modelValue.Elem()
    }
    
    // Check if the model is a struct
    if modelType.Kind() != reflect.Struct {
        return nil
    }
    
    // Create a new map to store the key-value pairs
    ret := make(map[string]interface{})
    
    // Iterate over the fields of the struct
    for i := 0; i < modelType.NumField(); i++ {
        // Get the field and its name
        field := modelType.Field(i)
        fieldName := field.Name
        
        // Check if the field has a JSON tag
        jsonTag := field.Tag.Get("json")
        if jsonTag != "" {
            fieldName = jsonTag
        }
        
        // Get the value of the field
        fieldValue := modelValue.Field(i)
        
        // Recursively convert nested structs
        switch fieldValue.Kind() {
        case reflect.Struct:
            ret[fieldName] = ConvertToMap(fieldValue.Interface())
        default:
            ret[fieldName] = fieldValue.Interface()
        }
    }
    
    return ret
}
Nach dem Login kopieren

Dies erfordert jedoch ein manuelles Extrahieren der Feldnamen und eine verschachtelte Konvertierung Strukturen.

Das obige ist der detaillierte Inhalt vonWie konvertiert man eine Go-Struktur mithilfe von JSON-Tags effizient in eine Karte?. 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