Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Tukar nilai semasa marshalling

Tukar nilai semasa marshalling

PHPz
PHPzke hadapan
2024-02-09 17:36:311183semak imbas

Tukar nilai semasa marshalling

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.

Kandungan soalan

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)
}

Penyelesaian

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

s).

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"
Ini ialah kod di atas yang dijalankan di taman permainan go.

🎜

Atas ialah kandungan terperinci Tukar nilai semasa marshalling. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam