ホームページ  >  記事  >  バックエンド開発  >  Go JSON エンコーディングでバイナリデータを処理する方法?

Go JSON エンコーディングでバイナリデータを処理する方法?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-05 17:30:02353ブラウズ

How to Handle Binary Data in Go JSON Encoding?

Go を使用して JSON で [] バイト文字列をエンコードする

問題: バイナリ データの予期しない JSON エンコード

Go では、[] バイト スライスが格納されます生のバイナリデータ。 json.Marshal() を使用して []byte フィールドを含む構造体を JSON にエンコードしようとすると、結果の JSON には、元のバイナリ データではなく、スライスの内容の予期しない文字列表現が含まれます。例:

<code class="go">type Msg struct {
    Content []byte
}

func main() {
    msg := Msg{[]byte("Hello")}
    json, _ := json.Marshal(msg)
    fmt.Println(string(json)) // Prints {"Content":"SGVsbG8="}
}</code>

Base64 エンコーディングの理由

json.Marshal() は、JSON には生のバイトのネイティブ表現がないため、[]byte スライスを Base64 エンコード文字列としてエンコードします。 Base64 エンコードは、印刷可能な ASCII 文字のシーケンスを使用してバイナリ データを表します。

解決策: 元のバイナリ データの復元

JSON 内の Base64 エンコード文字列から元のバイナリ データを取得するには、単純にBase64.StdEncoding.DecodeString 関数を使用した文字列:

<code class="go">import "encoding/base64"

func main() {
    ...
    decodedBytes, _ := base64.StdEncoding.DecodeString(msg.Content)
    fmt.Println(string(decodedBytes)) // Prints "Hello"
}</code>

以上がGo JSON エンコーディングでバイナリデータを処理する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。