Go で JSON []byte を文字列としてマーシャリングする
[]byte フィールドを含む構造体を JSON にエンコードすると、予期しない文字列表現が発生する可能性があります。結果。このエンコードでは、ドキュメントに記載されているように、[]byte フィールドは Base64 でエンコードされた文字列としてマーシャリングされます。
「配列とスライスの値は、[]byte が Base64 としてエンコードされることを除き、JSON 配列としてエンコードされます。」エンコードされた文字列であり、nil スライスは null JSON オブジェクトとしてエンコードされます。
この動作を説明するには、次の Msg 構造体を考えてみましょう:
<code class="go">type Msg struct { Content []byte }</code>
次の例では、文字列 "Hello" " は [] バイト スライス helloSlc に変換され、obj Msg オブジェクトの Content フィールドに割り当てられます:
<code class="go">helloStr := "Hello" helloSlc := []byte(helloStr) obj := Msg{helloSlc}</code>
json.Marshal を使用して obj を JSON にエンコードすると、結果の JSON には Base64 でエンコードされた文字列が含まれます[]byte フィールドの表現:
<code class="go">json, _ := json.Marshal(obj) fmt.Println(string(json))</code>
出力:
{"Content":"SGVsbG8="}
JSON 出力で元の文字列値「Hello」を取得するには、[]byte フィールドを次のようにする必要があります。 JSON にエンコードする前に、base64 でエンコードされた表現から明示的にデコードされます。これは、エンコーディング/base64 パッケージを使用して実現できます:
<code class="go">import ( "encoding/base64" "encoding/json" "fmt" ) type Msg struct { Content string } func main() { helloSlc := []byte("Hello") obj := Msg{string(base64.StdEncoding.EncodeToString(helloSlc))} json, _ := json.Marshal(obj) fmt.Println(string(json)) }</code>
出力:
{"Content":"Hello"}
以上がGo JSON エンコーディングで []byte フィールドを文字列としてマーシャリングする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。