Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menukar Go Struct kepada Peta Menggunakan Tag JSON dengan Cekap?

Bagaimana untuk Menukar Go Struct kepada Peta Menggunakan Tag JSON dengan Cekap?

Susan Sarandon
Lepaskan: 2024-12-11 18:41:10
asal
243 orang telah melayarinya

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

Fungsi Menukar Struktur kepada Peta di Golang

Soalan:

Bagaimana boleh Saya cekap menukar struct kepada peta di Golang, menggunakan tag JSON sebagai kunci di mana mungkin?

Jawapan:

Perpustakaan Pihak Ketiga:

Pakej arahan oleh Fatih menyediakan penyelesaian yang mudah dan komprehensif untuk ini tugasan:

func Map(object interface{}) map[string]interface{}
Salin selepas log masuk

Penggunaan:

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}
}
Salin selepas log masuk

Ciri:

  • Menyokong struktur tanpa nama dan bersarang
  • Menggunakan tag JSON untuk kunci
  • Membenarkan penapisan medan menggunakan teg

Pelaksanaan Tersuai:

Jika pelaksanaan tersuai diutamakan, renungkan.Struct boleh digunakan :

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
}
Salin selepas log masuk

Walau bagaimanapun, ini memerlukan pengekstrakan nama medan dan menukar struct bersarang.

Atas ialah kandungan terperinci Bagaimana untuk Menukar Go Struct kepada Peta Menggunakan Tag JSON dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan