Tukar kunci json secara dinamik apabila menyusun dan menyahmarshaling

WBOY
Lepaskan: 2024-02-11 09:30:09
ke hadapan
1205 orang telah melayarinya

marshal 和 unmarshal 时动态更改 json key

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!

Kandungan soalan

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
}
Salin selepas log masuk

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>
Salin selepas log masuk

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?

Penyelesaian

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}
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan