JSON Menyahkod ke dalam Structs vs. Maps
Dalam senario yang diterangkan, aplikasi menerima antara muka{} yang mengandungi struct yang sepadan dengan JSON struktur diterima sebagai tatasusunan bait. Walau bagaimanapun, selepas penyahkodan JSON, hasilnya ialah peta dan bukannya struct yang dijangkakan.
Tingkah laku ini disebabkan oleh cara json.Unmarshal mengendalikan penunjuk. Dengan merujuk antara muka{} yang pada asalnya memegang struct, proses penyahkodan tidak dapat menentukan jenis asas. Akibatnya, ia mengembalikan peta ringkas dan bukannya struct yang dikehendaki.
Untuk membetulkan isu ini, dua pendekatan boleh dipertimbangkan:
1. Hantaran Antara Muka Terus:
Lepaskan penuding kepada struct terus ke json.Unmarshal sebagai antara muka abstrak:
<code class="go">var ping interface{} = &Ping{} deserialize([]byte(`{"id":42}`), ping)</code>
2. Penciptaan Penunjuk Berasaskan Refleksi:
Jika penuding terus kepada struct tidak tersedia, gunakan pantulan untuk mencipta penuding baharu, nyahserikannya ke dalamnya dan salin semula nilai:
<code class="go">var ping interface{} = Ping{} nptr := reflect.New(reflect.TypeOf(ping)) deserialize([]byte(`{"id":42}`), nptr.Interface()) ping = nptr.Interface()</code>
Dengan mengguna pakai salah satu pendekatan ini, proses penyahkodan boleh mengenal pasti dengan betul struktur asas dan mengisi medannya daripada data JSON.
Atas ialah kandungan terperinci Berikut ialah beberapa pilihan tajuk, memfokuskan pada masalah dan penyelesaian: **Soalan Langsung. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!