首頁 >後端開發 >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