Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengendalikan Medan JSON yang Tidak Konsisten (Strings vs. Array) dalam Go?

Bagaimanakah Saya Boleh Mengendalikan Medan JSON yang Tidak Konsisten (Strings vs. Array) dalam Go?

DDD
DDDasal
2024-12-06 15:30:13214semak imbas

How Can I Handle Inconsistent JSON Fields (Strings vs. Arrays) in Go?

Menyahmarshalling JSON dengan Medan Tidak Konsisten: Mengendalikan Rentetan dan Tatasusunan

Apabila menyahmarshall data JSON ke dalam struct Go, ia boleh menjadi mencabar untuk mengendalikan medan yang boleh berbeza dalam jenis. Sebagai contoh, medan mungkin rentetan dalam kebanyakan kes tetapi tatasusunan rentetan sekali-sekala. Untuk menangani isu ini, kami membentangkan penyelesaian yang memanfaatkan keupayaan penghuraian JSON Go yang berkuasa.

Menangkap Medan Bervariasi dengan json.RawMessage

Kunci untuk mengendalikan medan JSON yang tidak konsisten terletak pada menangkap data mentah menggunakan json.RawMessage. Jenis ini ialah kepingan bait yang menyimpan nilai JSON yang tidak dihuraikan. Dengan menyimpan data mentah, kami mempunyai fleksibiliti untuk menghuraikannya kemudian bergantung pada jenis khususnya.

Menyembunyikan Medan Nama Paparan dan Mengisinya Selepas Penyahkodan

Untuk mengelakkan penyahkod daripada cuba mentafsir medan DisplayName sebelum kami mempunyai data yang berkaitan, kami menyembunyikannya menggunakan nama "-" JSON. Nama ini mengarahkan penyahkod untuk mengabaikan medan semasa unmarshalling awal. Selepas JSON peringkat atas telah dinyahkod, kami mengisi medan DisplayName secara manual berdasarkan data mentah yang dihuraikan.

Mengendalikan Pelbagai Jenis Data Mentah

Bergantung pada sama ada data mentah ialah rentetan atau tatasusunan rentetan, kami meneruskan seperti berikut:

  • Jika mentah data ialah rentetan, kami menyahmarselingnya menjadi satu rentetan dan menetapkannya kepada DisplayName.
  • Jika data mentah ialah tatasusunan rentetan, kami menyahmarselingnya ke dalam hirisan rentetan dan menyimpannya dalam DisplayName selepas menyertai rentetan dengan pembatas.

Menyepadukan ke dalam Gelung untuk MyListings

Untuk mengendalikan senarai item, seperti MyListings, kami boleh mengulangi setiap item dan melakukan logik unmarshalling yang sama seperti yang diterangkan di atas. Ini membolehkan kami mengendalikan sebarang ketidakkonsistenan dalam medan DisplayName untuk setiap item.

Mengenkapsulasi Logik dengan Custom Unmarshaler

Jika berbilang medan dalam model data boleh mempunyai ketidakkonsistenan jenis, ia boleh memberi manfaat untuk merangkum logik dalam jenis tersuai yang melaksanakan antara muka json.Unmarshaler. Ini memudahkan proses dan mengurangkan pertindihan.

Kesimpulannya, dengan menggunakan json.RawMessage dan menyembunyikan medan yang berbeza-beza, kami boleh menyahmarshal data JSON dengan medan yang tidak konsisten dengan berkesan, memastikan semua data yang diperlukan ditangkap dan dihuraikan dengan betul. Contoh yang disediakan dan pautan taman permainan menunjukkan penyelesaian dalam amalan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Medan JSON yang Tidak Konsisten (Strings vs. Array) 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