Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyahmarshall Data JSON Arbitrari dalam Go dengan Skema Didorong Kod Dinamik?

Bagaimana untuk Menyahmarshall Data JSON Arbitrari dalam Go dengan Skema Didorong Kod Dinamik?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-01 08:22:30681semak imbas

How to Unmarshall Arbitrary JSON Data in Go with a Dynamic Code-Driven Schema?

Menyahmarshalling Data Arbitrary dengan JSON and Go

Anda mempunyai keperluan khusus: unmarshalling data JSON dengan cara yang membolehkan anda memprosesnya dalam bahagian atau bahagian. Untuk mencapai matlamat ini, anda membayangkan struktur di mana separuh pertama data, atau "kod," menunjukkan cara mentafsir separuh kedua. Dua struct berpotensi untuk separuh masa kedua ialah Julat dan Pengguna.

Cabaran

Pakej json sedia ada dalam Go menyediakan fungsi yang mudah untuk menyusun dan menyahmarshaling struct yang ditentukan, tetapi ia tidak memenuhi keperluan anda untuk data sewenang-wenangnya.

Menyahkod Penyelesaian

Penyelesaian melibatkan pengenalan medan json.RawMessage (Payload) dalam struct Mesej anda. Medan ini membolehkan anda menangguhkan menghuraikan data sehingga anda mengetahui kod yang dinyatakan pada separuh pertama.

Berikut ialah contoh pelaksanaan dalam Go:

<code class="go">type Message struct {
    Code    int
    Payload json.RawMessage
}
type Range struct {
    Start int
    End   int
}
type User struct {
    ID   int
    Pass int
}

// Custom unmarshalling function
func MyUnmarshall(m []byte) {
    var message Message
    json.Unmarshal(m, &message)
    var payload interface{}
    switch message.Code {
    case 3:
        payload = new(User)
    case 4:
        payload = new(Range)
    }
    json.Unmarshal(message.Payload, payload)
}</code>

Penggunaan

Anda akan menggunakan penyelesaian ini dengan mengosongkan "separuh atas" terlebih dahulu menggunakan fungsi json.Unmarshal. Kemudian, berdasarkan kod yang diambil daripada "separuh atas," anda akan menyahmarshall "separuh bawah" menggunakan fungsi json.Unmarshal sekali lagi, kali ini menyediakan json.RawMessage sasaran objek.

Contoh

<code class="go">json := []byte(`{"Code": 4, "Payload": {"Start": 1, "End": 10}}`)
MyUnmarshall(json) // This will decode the data into a Range object</code>

Pertimbangan

Teknik ini membolehkan anda mengendalikan data sewenang-wenangnya unmarshalling dalam struktur dan cara yang fleksibel. Walau bagaimanapun, ia memperkenalkan kebergantungan masa jalan pada mengetahui kod terlebih dahulu dan kewujudan struct padanan untuk kod yang berbeza.

Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshall Data JSON Arbitrari dalam Go dengan Skema Didorong Kod Dinamik?. 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