Si vous travaillez avec des données JSON qui utilisent des clés Snake_case et que vous devez les convertir en camelCase, vous pouvez le faire efficacement dans Go. Ce guide montre comment accomplir cette tâche de manière récursive.
Introduite dans Go 1.8, vous pouvez créer deux structures qui ne diffèrent que par leurs balises de champ JSON. Cela permet une conversion facile entre les deux structures :
<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>
Si la structure JSON est plus complexe, vous pouvez utiliser une approche récursive pour convertir les clés :
<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>
Dans cette solution, la fonction convertKeys convertit de manière récursive toutes les clés d'une map JSON. Remplacez la fonction fixKey par votre propre version pour convertir Snake_case en CamelCase.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!