Maison > développement back-end > Golang > le corps du texte

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

Susan Sarandon
Libérer: 2024-10-28 13:12:02
original
888 Les gens l'ont consulté

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

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

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!

source:php.cn
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!