首页 > 后端开发 > Golang > 正文

如何使用 Go 将 JSON 中的蛇形命名法键转换为驼峰式命名法?

Susan Sarandon
发布: 2024-10-28 13:12:02
原创
887 人浏览过

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

使用 Go 将 Snake-Case 密钥转换为 JSON 中的 CamelCase

如果您正在使用使用 Snake_case 键的 JSON 数据,并且需要将它们转换为 CamelCase,你可以在 Go 中高效地做到这一点。本指南演示了如何递归地完成此任务。

使用不同结构体标签的解决方案

在 Go 1.8 中引入,您可以创建两个仅在 JSON 字段标签上不同的结构体。这样可以轻松地在两个结构之间进行转换:

<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>
登录后复制

一般情况的递归解决方案

如果 JSON 结构更复杂,您可以使用递归方法来转换键:

<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>
登录后复制

在此解决方案中,convertKeys 函数递归地转换 JSON 映射的所有键。将fixKey函数替换为您自己的版本,以将snake_case转换为camelCase。

以上是如何使用 Go 将 JSON 中的蛇形命名法键转换为驼峰式命名法?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!