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!