Maison  >  Article  >  développement back-end  >  Comment convertir des clés Snake-Case en CamelCase en JSON à l'aide de Go ?

Comment convertir des clés Snake-Case en CamelCase en JSON à l'aide de Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-28 13:12:02886parcourir

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

Conversion des clés Snake-Case en CamelCase dans JSON à l'aide de Go

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.

Solution utilisant différentes balises Struct

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>

Solution récursive pour les cas généraux

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn