Menukar Snake-Case kepada CamelCase Keys dalam JSON
Dalam Go, menukar kunci dalam dokumen JSON daripada snake_case kepada camelCase boleh mencabar, terutamanya apabila JSON bersarang dan mungkin mengandungi jenis yang besar atau antara muka{} sewenang-wenangnya.
Kaedah 1: Menggunakan Struktur Berbeza dengan Teg
Untuk kes penukaran mudah, anda boleh memanfaatkan keupayaan Go untuk menentukan struktur yang berbeza dengan tag yang berbeza-beza. Nyahmarshal JSON ke dalam struct sumber dengan teg snake_case, kemudian tukarkannya secara remeh kepada struct sasaran dengan teg camelCase.
<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>
Kaedah 2: Menukar Kekunci Peta Secara Rekursif
Untuk dokumen JSON yang lebih kompleks, anda boleh cuba unmarshal ke dalam peta. Jika berjaya, gunakan fungsi penukaran kunci secara rekursif pada semua kunci dan nilai dalam peta.
<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>
Atas ialah kandungan terperinci Bagaimana untuk Menukar Snake-Case kepada CamelCase Keys dalam JSON menggunakan Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!