editor php Strawberry memperkenalkan anda kepada penukaran nilai semasa pengumpulan. Dalam pengaturcaraan, menukar nilai apabila marshalling merujuk kepada operasi menukar antara jenis data yang berbeza. Dengan menukar nilai, kita boleh menukar nilai satu jenis data kepada jenis data lain untuk memenuhi keperluan khusus. Contohnya, tukar rentetan kepada integer, atau integer kepada rentetan, dsb. Menukar nilai adalah salah satu operasi yang sangat biasa dan penting dalam pengaturcaraan Menguasai penggunaan nilai yang ditukar boleh meningkatkan fleksibiliti dan kebolehbacaan kod, sementara juga mengelakkan beberapa kemungkinan ralat dan masalah. Dalam artikel berikut, kami akan memperkenalkan secara terperinci kaedah penukaran dan pertimbangan antara jenis data yang berbeza untuk membantu anda memahami dengan lebih baik dan menggunakan nilai penukaran semasa menyusun.
Memandangkan kod di bawah, adakah mungkin untuk menukar nama semasa unmarshalling? Katakan saya mahu ia sentiasa menggunakan huruf kecil tanpa mengira sama ada ia dalam json sebenar atau tidak.
type Person struct { FirstName string `json:"first_name"` LastName string `json:"last_name"` } func main() { jsonText := GetJsonFromSomewhere() var v Person json.Unmarshal(jsonText, &v) }
Satu cara untuk mencapai ini ialah dengan mencipta jenis tersuai yang melaksanakan fungsi encoding/json
包中的 unmarshaler
接口。 这是此界面的链接。任何实现 unmarshaler
的类型都可以在进行 json 解组时用作结构体字段的类型。在进行解组时,encoding/json
将使用接口的 unmarshaljson
yang menukar bait json kepada jenis medan.
Jadi, anda boleh menulis fungsi unmarshaljson
yang, antara lain, menukar nilai rentetan kepada huruf kecil.
Berikut adalah contoh:
type lowercasestring string func (l *lowercasestring) unmarshaljson(bytes []byte) error { lowercasedstring := strings.tolower(string(bytes)) *l = lowercasestring(lowercasedstring) return nil }
Kemudian, dalam struktur peta json, anda boleh menggunakan jenis tersuai sebaliknya string
:
type person struct { firstname lowercasestring `json:"first_name"` lastname lowercasestring `json:"last_name"` }
Jika anda membuka struktur ini, nilai untuk nama pertama dan nama keluarga akan menjadi huruf kecil (juga ambil perhatian bahawa anda perlu menaipnya kembali ke string
以将它们用作 string
untuk menggunakannya sebagai
testJSON := `{"first_name" : "TestFirstNAME", "last_name": "TestLastNAME"}` var result Person err := json.Unmarshal([]byte(testJSON), &result) if err != nil { /*handle the error*/ } fmt.Println(result.FirstName) // prints "testfirstname" var stringLastName string stringLastName = string(result.LastName) // need to type convert from LowerCaseString to string fmt.Println(stringLastName) // prints "testlastname"
Atas ialah kandungan terperinci Tukar nilai semasa marshalling. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!