Jika anda menggunakan data JSON yang menggunakan kekunci snake_case dan anda perlu menukarnya kepada camelCase, anda boleh melakukannya dengan cekap dalam Go. Panduan ini menunjukkan cara untuk menyelesaikan tugasan ini secara rekursif.
Diperkenalkan dalam Go 1.8, anda boleh mencipta dua struct yang berbeza hanya dalam teg medan JSON mereka. Ini membolehkan penukaran mudah antara dua struct:
<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>
Jika struktur JSON lebih kompleks, anda boleh menggunakan pendekatan rekursif untuk menukar kunci:
<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>
Dalam penyelesaian ini, fungsi convertKeys menukar secara rekursif semua kekunci peta JSON. Gantikan fungsi fixKey dengan versi anda sendiri untuk menukar snake_case kepada camelCase.
Atas ialah kandungan terperinci Bagaimana untuk Menukar Kunci Snake-Case kepada CamelCase dalam JSON menggunakan Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!