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

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-28 17:07:29656浏览

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

将 JSON 中的蛇形命名法转换为驼峰命名法

在 Go 中,将 JSON 文档中的键从 Snake_Case 转换为 CamelCase 可能具有挑战性,特别是当 JSON 嵌套并且可能包含任意大或 interface{} 类型时。

方法 1:使用带有标签的不同结构

对于简单的转换情况,您可以利用 Go 的能力来定义具有不同标签的不同结构。使用snake_case标签将JSON解组到源结构中,然后使用camelCase标签将其简单地转换为目标结构。

<code class="go">import (
    "encoding/json"
)

// Source struct with snake_case tags
type ESModel struct {
    AB string `json:"a_b"`
}

// Target struct with camelCase tags
type APIModel struct {
    AB string `json:"aB"`
}

func ConvertKeys(json []byte) []byte {
    var x ESModel
    json.Unmarshal(b, &x)

    b, _ = json.MarshalIndent(APIModel(x), "", "  ")
    return b
}</code>

方法2:递归地转换映射键

对于更复杂的 JSON 文档,您可以尝试将其解组到映射中。如果成功,则递归地将键转换函数应用于映射中的所有键和值。

<code class="go">import (
    "bytes"
    "encoding/json"
    "fmt"
    "strings"
)

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn