編組json.RawMessage:解密Base64 編碼
在嘗試編組json.RawMessage 物件時,您可能會遇到程式碼的意外編碼字串作為輸出而不是所需的JSON 字串。為了闡明這種行為,讓我們深入研究底層概念。
json.RawMessage,顧名思義,旨在將原始 JSON 資料作為位元組切片進行處理。當您嘗試使用 json.Marshal 封送 RawMessage 時,預設行為是將其編碼為常規 [] 位元組。這導致了您觀察到的 Base64 編碼。
為了克服這個問題,解決方案是將指向 RawMessage 的指標傳遞給 json.Marshal。這是因為負責編組過程的 RawMessage 的 MarshalJSON 方法需要一個指標作為其參數。如果沒有指針,它無法按預期正確返回位元組切片。
透過修改程式碼以傳遞指針,如下所示,您將檢索預期的 JSON 字串作為輸出:
package main import ( "encoding/json" "fmt" ) func main() { raw := json.RawMessage(`{"foo":"bar"}`) j, err := json.Marshal(&raw) if err != nil { panic(err) } fmt.Println(string(j)) }
輸出:
{"foo":"bar"}
以上是為什麼 json.Marshal 會將 json.RawMessage 編碼為 Base64?的詳細內容。更多資訊請關注PHP中文網其他相關文章!