Rumah > pembangunan bahagian belakang > Golang > 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
Lepaskan: 2024-11-01 02:09:28
asal
573 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan