Maison > développement back-end > Golang > Comment puis-je convertir les clés JSON de Snake_case en camelCase dans Go ?

Comment puis-je convertir les clés JSON de Snake_case en camelCase dans Go ?

Patricia Arquette
Libérer: 2024-11-01 02:09:28
original
615 Les gens l'ont consulté

How can I convert JSON keys from snake_case to camelCase in Go?

Conversion des clés JSON Snake Case en clés Camel Case

Dans Go, les clés Snake_case d'un objet JSON peuvent être converties en clés CamelCase de manière récursive en utilisant techniques basées sur les structures de données de Go et la fonctionnalité d'encodage/décodage JSON.

Une approche consiste à définir deux structures qui ne diffèrent que par leurs balises JSON, permettant une conversion facile entre elles. Le code suivant le démontre :

<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>
Copier après la connexion

Pour une conversion plus générale, une méthode alternative consiste à désorganiser le document JSON dans une carte. En cas de succès, des correctifs clés peuvent être appliqués et des appels récursifs effectués pour chaque valeur de la carte.

<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>
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal