Heim >Backend-Entwicklung >Golang >Wie konvertiert man Snake-Case-Schlüssel in JSON mit Go in CamelCase-Schlüssel?

Wie konvertiert man Snake-Case-Schlüssel in JSON mit Go in CamelCase-Schlüssel?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-28 17:07:29656Durchsuche

How to Convert Snake-Case to CamelCase Keys in JSON Using Go?

Konvertieren von Snake-Case- in CamelCase-Schlüsseln in JSON

In Go kann das Konvertieren von Schlüsseln in einem JSON-Dokument von Snake_case in CamelCase eine Herausforderung sein. insbesondere wenn das JSON verschachtelt ist und beliebig große oder Interface{}-Typen enthalten kann.

Methode 1: Verschiedene Strukturen mit Tags verwenden

Für einfache Konvertierungsfälle können Sie dies tun Nutzen Sie die Fähigkeit von Go, verschiedene Strukturen mit unterschiedlichen Tags zu definieren. Entpacken Sie das JSON mit den Tags „snake_case“ in die Quellstruktur und konvertieren Sie es dann ganz einfach mit den Tags „camelCase“ in die Zielstruktur.

<code class="go">import (
    "encoding/json"
)

// Source struct with snake_case tags
type ESModel struct {
    AB string `json:"a_b"`
}

// Target struct with camelCase tags
type APIModel struct {
    AB string `json:"aB"`
}

func ConvertKeys(json []byte) []byte {
    var x ESModel
    json.Unmarshal(b, &x)

    b, _ = json.MarshalIndent(APIModel(x), "", "  ")
    return b
}</code>

Methode 2: Rekursives Konvertieren von Kartenschlüsseln

Bei komplexeren JSON-Dokumenten können Sie versuchen, sie in eine Karte zu entmarshalieren. Bei Erfolg wenden Sie die Schlüsselkonvertierungsfunktion rekursiv auf alle Schlüssel und Werte innerhalb der Karte an.

<code class="go">import (
    "bytes"
    "encoding/json"
    "fmt"
    "strings"
)

func ConvertKeys(j json.RawMessage) json.RawMessage {
    m := make(map[string]json.RawMessage)
    if err := json.Unmarshal([]byte(j), &m); err != nil {
        // Not a JSON object
        return j
    }

    for k, v := range m {
        fixed := fixKey(k)
        delete(m, k)
        m[fixed] = convertKeys(v)
    }

    b, err := json.Marshal(m)
    if err != nil {
        return j
    }

    return json.RawMessage(b)
}

func fixKey(key string) string {
    return strings.ToUpper(key)
}</code>

Das obige ist der detaillierte Inhalt vonWie konvertiert man Snake-Case-Schlüssel in JSON mit Go in CamelCase-Schlüssel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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