ホームページ > バックエンド開発 > Golang > []byte を JSON にマーシャリングすると Base64 でエンコードされた文字列が生成されるのはなぜですか?

[]byte を JSON にマーシャリングすると Base64 でエンコードされた文字列が生成されるのはなぜですか?

Susan Sarandon
リリース: 2024-12-07 14:34:13
オリジナル
525 人が閲覧しました

Why Does Marshaling []byte to JSON Result in a Base64 Encoded String?

[]byte を JSON にマーシャリングする: 文字列表現を理解する

[]byte 値を JSON 形式にマーシャリングしようとすると、特有の問題が発生する可能性があります。元の質問で強調表示されているものと同様の文字列出力。この記事では、[]byte を JSON に正しくマーシャリングする方法と、出力が観察された文字列に変換される理由という謎の両面について説明します。

解決策: []byte を JSON にマーシャリングする

json.Marshal の Golang の公式ドキュメントによると、配列とスライスの値は JSON 配列としてエンコードされます。このルールの例外は []byte スライスに適用され、特に Base64 エンコード文字列としてエンコードされます。逆に、nil スライスは null JSON オブジェクトとしてエンコードされます。

したがって、[]byte を JSON に正確にマーシャリングするには、マーシャリング プロセス中に、base64 でエンコードされた文字列として明示的にキャストする必要があります。

理由: [] バイトの Base64 エンコーディング

元の質問の出力で観察された動作は、JSON の []byte スライスに使用されるエンコード メカニズムの直接の結果です。 JSON は生のバイト スライスをネイティブに表現できません。したがって、それらはbase64でエンコードされた文字列に変換されます。 Base64 エンコードでは、バイナリ データを文字列として表現できるため、JSON などのテキストベースの形式での送信や保存に適しています。

たとえば、出力に表示される文字列「AAAAAQID」は、base64 を表します。 [] バイト スライス [0, 0, 0, 1, 2, 3] のエンコードされたバージョン。

元のバイト スライスを取得するにはBase64 表現では、以下のコードに示すように、base64.StdEncoding.DecodeString 関数を使用できます。

import "encoding/base64"

func decodeBase64(encodedString string) ([]byte, error) {
    return base64.StdEncoding.DecodeString(encodedString)
}
ログイン後にコピー

結論

[] バイトを JSON にマーシャリングするこれは、バイナリ データをテキスト ベースの形式で表現する必要性に基づいて行われる手法です。このエンコード メカニズムを理解すると、マーシャリング プロセス中に発生する一見奇妙な文字列出力をわかりやすく理解するのに役立ちます。

以上が[]byte を JSON にマーシャリングすると Base64 でエンコードされた文字列が生成されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート