首頁 >後端開發 >Golang >如何在 Go JSON 中將蛇形命名法鍵轉換為駝峰式命名法?

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

DDD
DDD原創
2024-10-28 12:07:01831瀏覽

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

將JSON 中的蛇形大小寫鍵轉換為Go 中的駝峰式大小寫

問題:

問題:

問題:

問題:

<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>

問題:

問題:

<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>
問題:題: 中那麼,我們要如何將JSON 中的Snake_case 鍵遞歸轉換為CamelCase 鍵呢?這對於在從 Elasticsearch 等資料儲存體接收資料時將 API 回應 JSON 與內部標準保持一致尤其相關,其中關鍵格式可能會有所不同。 答案:要實現此目的轉換時,我們可以利用多種方法。一種有效的方法利用 Go 1.8 的功能,即定義兩個具有不同欄位標籤的結構體。透過精心設計標籤,我們可以毫不費力地在兩個結構之間進行轉換,有效地應用所需的按鍵轉換。 使用標籤的程式碼範例:基於遞歸映射的方法:另一個全面的策略涉及嘗試將JSON 文件解組為映射。如果操作成功,我們就可以有條不紊地修正鍵,並為每個映射值遞歸執行鍵轉換函數。以下範例說明如何將所有按鍵轉換為大寫。在您的實作中,fixKey函數應該被替換為snake_case轉換函數。

以上是如何在 Go JSON 中將蛇形命名法鍵轉換為駝峰式命名法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn