Editor php Xiaoxin akan memperkenalkan kepada anda kaedah menukar nilai kunci JSON secara dinamik semasa proses Marshal dan Unmarshal. Apabila memproses data JSON, kadangkala kita perlu mengubah suai atau menggantikan nilai utama. Artikel ini akan berkongsi helah mudah tetapi berkesan untuk membantu pembangun mencapai matlamat ini dalam PHP. Dengan menggunakan beberapa fungsi dan teknologi tertentu, kami boleh mengendalikan data JSON dengan mudah dan mencapai keperluan untuk menukar nilai utama secara dinamik. Seterusnya, sila ikut editor untuk mempelajari teknik praktikal ini!
Saya terpaksa menggunakan API yang mempunyai dua kunci atau pengecam berbeza untuk objek yang sama (nombor VAT). Bergantung sama ada panggilan itu GET atau POST/PATCH
Dalam GET saya perlu unmarshal/decode json menggunakan struktur ini:
type SilverfinCompany struct { ID int `json:"id"` Name string `json:"name"` Vat string `json:"vat"` // here }
Dalam POST dan PATCH saya boleh menyusun data ke dalam json menggunakan struktur ini:
<code>type SilverfinCompany struct { ID int `json:"id"` Name string `json:"name"` Vat string `json:"vat_identifier"` // here } </code>
Penyelesaian yang jelas ialah mempunyai dua struktur "berbeza" dengan kandungan yang sama tetapi kunci JSON yang berbeza sedikit, dan dua fungsi penukaran. Atau mempunyai dua medan berbeza dalam struktur: Vat dan VatIndentifier.
Masalahnya ialah ia menambahkan kerumitan tambahan kepada kod yang sudah kompleks.
Jadi saya ingin tahu:
Adakah terdapat cara (serupa dengan refleksi) untuk menukar kunci JSON medan Vat dalam struktur bergantung pada situasi?
Anda tidak boleh mengubah suai takrif jenis pada masa jalan, termasuk tag struct.
Selagi jenis medan dan susunan (iaitu susun atur memori) adalah sama, tidak ada keperluan untuk sebarang fungsi penukaran sama sekali, ia boleh ditukar terus: https://go.dev/play/p/IhkVM- BMLiY
func main() { foo := SilverfinCompanyFoo{ ID: 1, Name: "Baz", Vat: "Qux", } bar := SilverfinCompanyBar(foo) fmt.Println(bar) } type SilverfinCompanyFoo struct { ID int `json:"id"` Name string `json:"name"` Vat string `json:"vat"` // here } type SilverfinCompanyBar struct { ID int `json:"id"` Name string `json:"name"` Vat string `json:"vat_identifier"` // here } // {1 Baz Qux}
Ini adalah penyelesaian biasa untuk senario jenis ini.
Atas ialah kandungan terperinci Tukar kunci json secara dinamik apabila menyusun dan menyahmarshaling. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!