Heim > Artikel > Backend-Entwicklung > Wie kann ich JSON-Schlüssel in Go von „snake_case“ in „camelCase“ konvertieren?
JSON-Snake-Case-Schlüssel in Camel-Case-Schlüssel konvertieren
In Go können Snake_Case-Schlüssel in einem JSON-Objekt rekursiv mit in CamelCase-Schlüssel konvertiert werden Techniken, die auf den Datenstrukturen von Go und der JSON-Kodierungs-/Dekodierungsfunktionalität basieren.
Ein Ansatz besteht darin, zwei Strukturen zu definieren, die sich nur in ihren JSON-Tags unterscheiden, um eine einfache Konvertierung zwischen ihnen zu ermöglichen. Der folgende Code demonstriert dies:
<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>
Für eine allgemeinere Konvertierung besteht eine alternative Methode darin, das JSON-Dokument in eine Karte zu entmarshallieren. Bei Erfolg können Schlüsselkorrekturen angewendet und rekursive Aufrufe für jeden Wert in der Karte durchgeführt werden.
<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 { 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 kann ich JSON-Schlüssel in Go von „snake_case“ in „camelCase“ konvertieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!