Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyahmarshal Medan JSON Apabila Ia Adalah Rentetan Daripada Integer?

Bagaimana untuk Menyahmarshal Medan JSON Apabila Ia Adalah Rentetan Daripada Integer?

DDD
DDDasal
2024-11-12 17:33:02936semak imbas

How to Unmarshal JSON Fields When They Are Strings Instead of Integers?

Cara Mengendalikan Ralat Unmarshal Apabila Medan JSON Adalah Rentetan Daripada Integer

Apabila berurusan dengan data JSON, anda mungkin menghadapi situasi di mana medan JSON diwakili sebagai rentetan bukannya integer, menyebabkan JSON Unmarshal gagal. Isu ini timbul apabila JavaScript, yang tidak mengendalikan nilai int64 dengan baik, mengekod data JSON.

Pertimbangkan struct berikut:

type tySurvey struct {
    Id     int64       `json:"id,omitempty"`
    Name   string      `json:"name,omitempty"`
}

Apabila anda menyusun struct ini ke dalam JSON menggunakan Marshal standard fungsi dan kemudian ubah suai medan nama dengan jQuery sebelum menyiarkannya kembali kepada pengendali Go anda, medan id mungkin dikodkan sebagai rentetan. Ini membawa kepada ralat apabila cuba menyahmarshal JSON ke dalam struct tySurvey:

json: cannot unmarshal string into Go value of type int64

Untuk menyelesaikan isu ini, anda boleh menentukan bahawa medan id boleh dinyahmarshalkan daripada rentetan dengan menambahkan ,rentetan pada JSON tag:

type tySurvey struct {
    Id   int64       `json:"id,string,omitempty"` // Add ",string" to handle string values
    Name   string      `json:"name,omitempty"`
}

Ini membolehkan JSON Unmarshal berjaya menukar perwakilan rentetan medan id kepada integer.

Perhatikan bahawa tetapan omitempty pada medan dengan ,rentetan tidak disyorkan, kerana rentetan kosong tidak boleh dipisahkan menjadi integer.

Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshal Medan JSON Apabila Ia Adalah Rentetan Daripada Integer?. 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