Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyahmarshall Data JSON Secara Dinamik Berdasarkan Nilai Kod?

Bagaimana untuk Menyahmarshall Data JSON Secara Dinamik Berdasarkan Nilai Kod?

Linda Hamilton
Linda Hamiltonasal
2024-10-31 04:22:02838semak imbas

How to Unmarshall JSON Data Dynamically Based on a Code Value?

Arbitrary Data Unmarshalling

Dalam banyak senario, adalah perlu untuk menyahmarshall data JSON dengan cara yang fleksibel, membenarkan proses unmarshalling menyesuaikan diri dengan berbeza struktur data berdasarkan nilai kod yang telah ditetapkan. Ini membolehkan tafsiran dinamik data yang diterima daripada pelbagai sumber.

Sebagai contoh, pertimbangkan mesej JSON yang mengandungi medan "kod", yang menentukan jenis data yang terkandung dalam medan "muatan". Medan "muatan" boleh mewakili struktur data yang berbeza bergantung pada nilai "kod".

Untuk mencapai ini, kita boleh menggunakan teknik berikut:

<code class="go">package main

import (
    "encoding/json"
    "fmt"
)

type Message struct {
    Code    int
    Payload json.RawMessage // delay parsing until we know the code
}

// Define the possible data structures that can be unmarshalled from the "payload" field
type Range struct {
    Start int
    End   int
}
type User struct {
    ID   int
    Pass int
}

// Custom unmarshalling function
func MyUnmarshall(m []byte) {
    var message Message
    var payload interface{}
    json.Unmarshal(m, &message) // delay parsing until we know the color space

    // Determine the data structure based on the "code" field
    switch message.Code {
    case 3:
        payload = new(User)
    case 4:
        payload = new(Range)
    }

    // Unmarshall the "payload" field into the appropriate data structure
    json.Unmarshal(message.Payload, payload) //err check ommited for readability

    // Do something with the unmarshalled data
    fmt.Printf("\n%v%+v", message.Code, payload)
}

func main() {
    json := []byte(`{"Code": 4, "Payload": {"Start": 1, "End": 10}}`)
    MyUnmarshall(json)
    json = []byte(`{"Code": 3, "Payload": {"ID": 1, "Pass": 1234}}`)
    MyUnmarshall(json)
}</code>

Dalam contoh ini, Fungsi MyUnmarshall menerima mesej JSON, menyimpan medan "kod" dan "muatan" dalam struktur Mesej, dan kemudian secara dinamik mencipta contoh struktur data berdasarkan nilai "kod". Ia kemudiannya menyahmarshal medan "muatan" ke dalam struktur yang sesuai dan melakukan tindakan yang diingini pada data yang tidak dikawal.

Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshall Data JSON Secara Dinamik Berdasarkan Nilai Kod?. 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