首页 > 后端开发 > Golang > 如何在 Go JSON 中将蛇形命名法键转换为驼峰式命名法?

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

DDD
发布: 2024-10-28 12:07:01
原创
824 人浏览过

How to Convert Snake Case Keys to Camel Case in Go JSON?

将 JSON 中的蛇形大小写键转换为 Go 中的驼峰式大小写

问题:

中那么,我们如何才能将 JSON 中的 Snake_case 键递归转换为 CamelCase 键呢?这对于在从 Elasticsearch 等数据存储接收数据时将 API 响应 JSON 与内部标准保持一致尤其相关,其中关键格式可能会有所不同。

答案:

要实现此目的转换时,我们可以利用多种方法。一种有效的方法利用 Go 1.8 的功能,即定义两个具有不同字段标签的结构体。通过精心设计标签,我们可以毫不费力地在两个结构之间进行转换,有效地应用所需的键转换。

使用标签的代码示例:

<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 文档解组为映射。如果操作成功,我们就可以有条不紊地纠正键,并为每个映射值递归执行键转换函数。以下示例说明如何将所有键转换为大写。在您的实现中,fixKey函数应该替换为snake_case转换函数。

<code class="go">package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "strings"
)

func main() {
    // Document source as returned by Elasticsearch
    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>
登录后复制

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板