Menyahmarshalling Arbitrary JSON Data
Soalan:
Bolehkah data JSON disusun mengikut cara yang membolehkan ia dibongkar dalam bahagian atau bahagian? Dalam senario ini, bahagian atas data mentakrifkan "kod" yang menunjukkan jenis data di bahagian bawah, yang mungkin berbeza antara struct. Bagaimanakah ini boleh dicapai dalam Go?
Jawapan:
Untuk menyahmarshall data JSON sewenang-wenangnya di mana bahagian bawah boleh berbeza-beza antara struct, anda boleh menangguhkan menghuraikan bahagian bawah sehingga "kod" dari bahagian atas diketahui.
Pelaksanaan:
Contoh Kod:
<code class="go">package main import ( "encoding/json" "fmt" ) type Message struct { Code int Payload json.RawMessage } type Range struct { Start int End int } type User struct { ID int Pass int } func MyUnmarshall(m []byte) { var message Message var payload interface{} json.Unmarshal(m, &message) switch message.Code { case 3: payload = new(User) case 4: payload = new(Range) } json.Unmarshal(message.Payload, payload) 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>
Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshalkan Data JSON Sewenang-wenangnya dengan Struktur Berubah-ubah Berdasarkan \'Kod\'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!