Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah saya Boleh Menyahmarshal Data JSON ke dalam Jenis Antara Muka dalam Go?

Bagaimanakah saya Boleh Menyahmarshal Data JSON ke dalam Jenis Antara Muka dalam Go?

Barbara Streisand
Lepaskan: 2024-12-20 09:22:11
asal
581 orang telah melayarinya

How Can I Unmarshal JSON Data into an Interface Type in Go?

Unmarshal to an Interface Type

Dalam RPC, marshalling kepada jenis antara muka adalah mudah kerana objek adalah setempat dan reflektor boleh mengenal pasti jenis asasnya. Walau bagaimanapun, unmarshalling kepada jenis antara muka memberikan cabaran.

Reflektor tidak boleh menentukan jenis konkrit untuk diberikan kepada tika baharu yang akan menerima data tersusun. Had ini terpakai pada semua operasi marshalling/unmarshalling.

Untuk menyelesaikan isu ini dalam beberapa rangka kerja, maklumat tambahan disediakan untuk membantu reflektor. Contohnya, dalam Java Json(jackson), anotasi JsonTypeInfo menentukan jenis kelas.

Dalam Go, melaksanakan antara muka Unmarshaler untuk jenis tersuai anda boleh menangani cabaran ini. Pertimbangkan contoh berikut:

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

// RawString is a raw encoded JSON object.
// It implements Marshaler and Unmarshaler and can
// be used to delay JSON decoding or precompute a JSON encoding.
type RawString string

// MarshalJSON returns *m as the JSON encoding of m.
func (m *RawString) MarshalJSON() ([]byte, error) {
    return []byte(*m), nil
}

// UnmarshalJSON sets *m to a copy of data.
func (m *RawString) UnmarshalJSON(data []byte) error {
    if m == nil {
        return errors.New("RawString: UnmarshalJSON on nil pointer")
    }
    *m += RawString(data)
    return nil
}

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

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

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

Atas ialah kandungan terperinci Bagaimanakah saya Boleh Menyahmarshal Data JSON ke dalam Jenis Antara Muka 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