Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Berikut ialah beberapa pilihan tajuk, memfokuskan pada masalah dan penyelesaian: **Soalan Langsung

Berikut ialah beberapa pilihan tajuk, memfokuskan pada masalah dan penyelesaian: **Soalan Langsung

Linda Hamilton
Linda Hamiltonasal
2024-10-25 11:43:02254semak imbas

Here are a few title options, focusing on the problem and solution:

**Direct Question

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!

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