Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Tukar kunci json secara dinamik apabila menyusun dan menyahmarshaling

Tukar kunci json secara dinamik apabila menyusun dan menyahmarshaling

WBOY
WBOYke hadapan
2024-02-11 09:30:091144semak imbas

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
}

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?

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}

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Artikel sebelumnya:Set SQL Dinamik GolangArtikel seterusnya:Set SQL Dinamik Golang