Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyahmarshal Tatasusunan JSON Saiz Tidak Diketahui dalam Go?

Bagaimana untuk Menyahmarshal Tatasusunan JSON Saiz Tidak Diketahui dalam Go?

DDD
DDDasal
2024-12-12 12:43:13515semak imbas

How to Unmarshal JSON Arrays of Unknown Size in Go?

Menyahmarshall JSON dengan Tatasusunan Saiz Tidak Diketahui

Apabila mendapatkan semula data melalui JSON, selalunya JSON yang dikembalikan mungkin mempunyai atau tidak tatasusunan. Contohnya, apabila meminta senarai meter pintar, ia mungkin diterima sebagai satu elemen di bawah "gwrcmd." Walau bagaimanapun, apabila meminta penggunaan elektrik, ia mungkin dikembalikan sebagai tatasusunan "gwrcmds."

Kekaburan ini memberikan cabaran besar kerana struktur Go memerlukan takrifan yang jelas untuk tatasusunan dan elemen tunggal. Untuk menangani perkara ini, json.Unmarshal boleh digunakan untuk mengembalikan sama ada satu struct { } atau tatasusunan []struct { } berdasarkan struktur JSON.

Walau bagaimanapun, json.Unmarshal mungkin menghadapi ralat jika jangkaan jenis bercanggah dengan struktur JSON. Untuk menyelesaikan isu ini, struct kedua boleh dibuat yang menduplikasi yang pertama dengan pengecualian menggunakan kepingan untuk "Gwrcmd." Sebagai alternatif, pendekatan yang lebih teguh melibatkan penggunaan json.RawMessage untuk menangkap nilai JSON jenis yang tidak diketahui dan melakukan unmarshalling selanjutnya berdasarkan kandungannya. Ini mengelakkan tekaan untuk menentukan jenis tatasusunan berdasarkan bait pertama sahaja.

Contoh kedua-dua pendekatan ditunjukkan dalam coretan kod Go yang disediakan. Selain itu, sumber yang berkaitan disenaraikan untuk penerokaan lanjut.

Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshal Tatasusunan JSON Saiz Tidak Diketahui dalam Go?. 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