Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menukar Snake-Case kepada CamelCase Keys dalam JSON menggunakan Go?

Bagaimana untuk Menukar Snake-Case kepada CamelCase Keys dalam JSON menggunakan Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-28 17:07:29581semak imbas

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

Menukar Snake-Case kepada CamelCase Keys dalam JSON

Dalam Go, menukar kunci dalam dokumen JSON daripada snake_case kepada camelCase boleh mencabar, terutamanya apabila JSON bersarang dan mungkin mengandungi jenis yang besar atau antara muka{} sewenang-wenangnya.

Kaedah 1: Menggunakan Struktur Berbeza dengan Teg

Untuk kes penukaran mudah, anda boleh memanfaatkan keupayaan Go untuk menentukan struktur yang berbeza dengan tag yang berbeza-beza. Nyahmarshal JSON ke dalam struct sumber dengan teg snake_case, kemudian tukarkannya secara remeh kepada struct sasaran dengan teg 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>

Kaedah 2: Menukar Kekunci Peta Secara Rekursif

Untuk dokumen JSON yang lebih kompleks, anda boleh cuba unmarshal ke dalam peta. Jika berjaya, gunakan fungsi penukaran kunci secara rekursif pada semua kunci dan nilai dalam peta.

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

Atas ialah kandungan terperinci Bagaimana untuk Menukar Snake-Case kepada CamelCase Keys dalam JSON menggunakan Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn