首頁 > 後端開發 > Golang > 主體

為什麼我的「json.RawMessage」編組是 Base64?

Susan Sarandon
發布: 2024-11-09 21:35:02
原創
486 人瀏覽過

Why Does My `json.RawMessage` Marshal as Base64?

編組json.RawMessage:揭示Base64 編碼背後的原因

在這個有趣的場景中,您在嘗試執行以下操作時遇到了異常行為編組json.RawMessage 實例。令人驚訝的是,您沒有獲得預期的未編碼 JSON 字串,而是遇到了精心設計的 Base64 編碼版本。為了解開這個謎團,讓我們深入研究底層機制。

必須認識到,在 json.RawMessage 上使用 Marshal 函數時,關鍵因素在於確保輸入值位於事實上是一個指標。這種看似微妙的差異在 json.RawMessage 的行為中起著關鍵作用。

正如您正確指出的那樣,json.RawMessage 的 MarshalJSON 實作旨在簡單地返回底層位元組切片。但是,如果輸入值不是指針,Marshal 函數會在輸出之前自動對位元組切片套用 Base64 編碼。

要修正這種情況並獲得所需的結果,解決方案很簡單,只需傳遞指向 json.RawMessage 的指標即可。透過這樣做,您可以有效地指示 Marshal 函數直接對底層位元組切片進行操作,從而繞過不需要的 Base64 編碼過程。

考慮以下修改後的程式碼片段:

透過實施這一微妙但重要的變更後,您現在可以自信地預期預期結果:

此修改後的程式碼符合Marshal 函數對基於指標的輸入值的要求,有效消除了不需要的Base64 編碼。有了這些新發現的知識,您現在可以自信地應對類似的挑戰,並確保 Go 應用程式中實現所需的 JSON 編組行為。

以上是為什麼我的「json.RawMessage」編組是 Base64?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板