首頁 > 後端開發 > Golang > 主體

如何使用 Go 將 JSON 中的蛇形命名鍵轉換為駝峰式命名法?

Susan Sarandon
發布: 2024-10-28 13:12:02
原創
888 人瀏覽過

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學習者快速成長!