Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh menukar kunci JSON daripada snake_case kepada camelCase dalam Go?

Bagaimanakah saya boleh menukar kunci JSON daripada snake_case kepada camelCase dalam Go?

Patricia Arquette
Patricia Arquetteasal
2024-11-01 02:09:28556semak imbas

How can I convert JSON keys from snake_case to camelCase in Go?

Menukar Kunci Sarung Ular JSON kepada Kunci Sarung Unta

Dalam Go, kekunci snake_case dalam objek JSON boleh ditukar kepada kunci camelCase secara rekursif menggunakan teknik berdasarkan struktur data Go dan kefungsian pengekodan/penyahkodan JSON.

Satu pendekatan melibatkan penentuan dua struct yang hanya berbeza dalam teg JSON mereka, membolehkan penukaran mudah antara mereka. Kod berikut menunjukkan perkara ini:

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

Untuk penukaran yang lebih umum, kaedah alternatif melibatkan unmarshalling dokumen JSON ke dalam peta. Jika berjaya, pembetulan kunci boleh digunakan dan panggilan rekursif dibuat untuk setiap nilai dalam peta.

<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 {
            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 Bagaimanakah saya boleh menukar kunci JSON daripada snake_case kepada camelCase dalam 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