Heim  >  Artikel  >  Backend-Entwicklung  >  Wie konvertiere ich Snake-Case-Schlüssel in JSON mit Go in CamelCase?

Wie konvertiere ich Snake-Case-Schlüssel in JSON mit Go in CamelCase?

Susan Sarandon
Susan SarandonOriginal
2024-10-28 13:12:02887Durchsuche

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

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

Wenn Sie mit JSON-Daten arbeiten, die Snake_case-Schlüssel verwenden, und Sie diese in CamelCase konvertieren müssen, Sie können dies effizient in Go tun. Dieser Leitfaden zeigt, wie Sie diese Aufgabe rekursiv ausführen können.

Lösung mit verschiedenen Struktur-Tags

In Go 1.8 eingeführt, können Sie zwei Strukturen erstellen, die sich nur in ihren JSON-Feld-Tags unterscheiden. Dies ermöglicht eine einfache Konvertierung zwischen den beiden Strukturen:

<code class="go">package main

import (
    "encoding/json"
    "fmt"
)

type ESModel struct {
    AB string `json:"a_b"`
}

type APIModel struct {
    AB string `json:"aB"`
}

func main() {
    b := []byte(`{ "a_b": "c" }`)

    var x ESModel
    json.Unmarshal(b, &x)

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

Rekursive Lösung für allgemeine Fälle

Wenn die JSON-Struktur komplexer ist, können Sie einen rekursiven Ansatz zum Konvertieren der Schlüssel verwenden:

<code class="go">package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "strings"
)

func main() {
    b := json.RawMessage(`{
            "a_b": "c",
            "d_e": ["d"],
            "e_f": {
                    "g_h": {
                            "i_j": "k",
                            "l_m": {}
                    }
            }
    }`)

    x := convertKeys(b)

    buf := &bytes.Buffer{}
    json.Indent(buf, []byte(x), "", "  ")
    fmt.Println(buf.String())
}

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>

In dieser Lösung konvertiert die Funktion „convertKeys“ alle Schlüssel einer JSON-Map rekursiv. Ersetzen Sie die Funktion „fixKey“ durch Ihre eigene Version zum Konvertieren von „snake_case“ in „camelCase“.

Das obige ist der detaillierte Inhalt vonWie konvertiere ich Snake-Case-Schlüssel in JSON mit Go in CamelCase?. 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