Rumah > pembangunan bahagian belakang > Golang > Bagaimana Saya Boleh Mengendalikan JSON Marshaling dan Unmarshaling dengan Jenis Antara Muka Go?

Bagaimana Saya Boleh Mengendalikan JSON Marshaling dan Unmarshaling dengan Jenis Antara Muka Go?

DDD
Lepaskan: 2024-12-15 15:35:10
asal
540 orang telah melayarinya

How Can I Effectively Handle JSON Marshaling and Unmarshaling with Go's Interface Types?

Marshaling to Interface Types

JSON marshaling dan unmarshaling boleh memberikan cabaran apabila bekerja dengan jenis antara muka. Artikel ini menyelidiki kesukaran dan menyediakan penyelesaian.

Marshaling dari Antaramuka

Marshaling daripada jenis antara muka adalah mudah kerana jenis asas diketahui secara tempatan, membolehkan reflektor mengenal pastinya.

Menyahmarshaling ke Antara Muka

Menyahmarshaling kepada jenis antara muka, walau bagaimanapun, adalah bermasalah. Tanpa mengetahui jenis konkrit, reflektor tidak boleh membuat instance baharu untuk menerima data tersusun.

Menyelesaikan Isu

Untuk menangani had ini, satu pendekatan adalah dengan melaksanakan antara muka Unmarshaler untuk jenis tersuai . Rujuk contoh di bawah:

import (
    "encoding/json"
    "fmt"
    "log"
)

// RawString represents a raw JSON object.
type RawString string

// Implement the Marshaler and Unmarshaler interfaces.
func (m *RawString) MarshalJSON() ([]byte, error)   { return []byte(*m), nil }
func (m *RawString) UnmarshalJSON(data []byte) error { *m += RawString(data); return nil }

// Example data.
const data = `{"i":3, "S":{"phone": {"sales": "2223334444"}}}`

// Example struct.
type A struct {
    I int64
    S RawString `sql:"type:json"`
}

func main() {
    a := A{}
    if err := json.Unmarshal([]byte(data), &a); err != nil {
        log.Fatal("Unmarshal failed:", err)
    }
    fmt.Println("Done:", a)
}
Salin selepas log masuk

Dalam contoh ini, RawString melaksanakan kedua-dua Marshaler dan Unmarshaler, membenarkan marshaler dan unmarshaler tersuai. Fungsi utama kemudiannya menggunakan json.Unmarshal untuk menyahkod data JSON menjadi contoh A.

Atas ialah kandungan terperinci Bagaimana Saya Boleh Mengendalikan JSON Marshaling dan Unmarshaling dengan Jenis Antara Muka 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan