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

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

DDD
DDD原創
2024-11-08 21:40:02912瀏覽

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