首頁 > 後端開發 > Golang > 為什麼 json.Marshal 會將 json.RawMessage 編碼為 Base64?

為什麼 json.Marshal 會將 json.RawMessage 編碼為 Base64?

DDD
發布: 2024-11-08 21:40:02
原創
997 人瀏覽過

Why Does json.Marshal Encode json.RawMessage as Base64?

編組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中文網其他相關文章!

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