php小編小新將為大家介紹一個在Marshal和Unmarshal過程中動態改變JSON鍵值的方法。在處理JSON資料時,有時候我們需要對鍵值進行修改或替換。本文將分享一個簡單而有效的技巧,幫助開發者在PHP中實現這一目標。透過使用一些特定的函數和技術,我們可以輕鬆地對JSON資料進行操作,實現動態更改鍵值的需求。接下來,請跟著小編一起學習這個實用的技巧吧!
我被迫使用 API,該 API 對於同一物件(增值稅號)有兩個不同的金鑰或識別碼。取決於呼叫的是 GET 還是 POST/PATCH
在 GET 中,我必須使用此結構對 json 進行解組/解碼:
type SilverfinCompany struct { ID int `json:"id"` Name string `json:"name"` Vat string `json:"vat"` // here }
在 POST 和 PATCH 中,我可以使用此結構將資料編組為 json:
<code>type SilverfinCompany struct { ID int `json:"id"` Name string `json:"name"` Vat string `json:"vat_identifier"` // here } </code>
顯而易見的解決方案是擁有兩個內容相同但 JSON 鍵略有不同的「不同」結構,以及兩個轉換函數。或在結構中有兩個不同的字段:Vat 和 VatIndentifier。
問題在於,它會為已經很複雜的程式碼增加額外的複雜度。
所以我想知道:
有沒有辦法(類似反射)根據情況改變結構中 Vat 欄位的 JSON 鍵?
您無法在執行時修改類型定義,包括結構標記。
只要欄位類型和順序(即記憶體佈局)相同,就根本不需要任何轉換函數,它們可以直接轉換: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}
這是此類場景的常見解決方案。
以上是marshal 和 unmarshal 時動態更改 json key的詳細內容。更多資訊請關注PHP中文網其他相關文章!