Dalam senario tertentu, data JSON mungkin perlu disingkirkan dalam bahagian atau bahagian. Sebagai contoh, bahagian atas data mungkin menunjukkan tindakan yang perlu dilakukan pada bahagian bawah, seperti membongkar struktur tertentu berdasarkan "kod" di bahagian atas.
Pertimbangkan struktur sampel berikut:
<code class="go">type Range struct { Start int End int } type User struct { ID int Pass int }</code>
Sebagai contoh, data JSON mungkin menyerupai yang berikut:
<code class="json">// Message with "Code" 4, signifying a Range structure { "Code": 4, "Payload": { "Start": 1, "End": 10 } } // Message with "Code" 3, signifying a User structure { "Code": 3, "Payload": { "ID": 1, "Pass": 1234 } }</code>
Untuk mencapai unmarshalling ini, kita boleh menangguhkan menghuraikan separuh bahagian bawah data JSON sehingga kita telah menentukan kod di bahagian atas. Pertimbangkan pendekatan berikut:
<code class="go">import ( "encoding/json" "fmt" ) type Message struct { Code int Payload json.RawMessage // Delay parsing until we know the code } func MyUnmarshall(m []byte) { var message Message var payload interface{} json.Unmarshal(m, &message) // Delay parsing until we know the color space switch message.Code { case 3: payload = new(User) case 4: payload = new(Range) } json.Unmarshal(message.Payload, payload) // Error checks omitted for readability fmt.Printf("\n%v%+v", message.Code, payload) // Perform actions on the data } 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>
Dengan menggunakan pendekatan ini, anda boleh menyahmarshall arbitrary data JSON secara berkesan dalam bahagian, bergantung pada kod yang ditentukan.
Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshall Data JSON Arbitrari dalam Bahagian Berdasarkan Kod?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!