Home >Backend Development >Golang >How to Handle Binary Data in Go JSON Encoding?

How to Handle Binary Data in Go JSON Encoding?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-05 17:30:02437browse

How to Handle Binary Data in Go JSON Encoding?

Encoding []byte Strings in JSON Using Go

Problem: Unexpected JSON Encoding of Binary Data

In Go, a []byte slice stores raw binary data. When attempting to encode a struct containing []byte fields into JSON using json.Marshal(), the resulting JSON contains an unexpected string representation of the slice contents instead of the original binary data. For example:

<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>

Reason for Base64 Encoding

json.Marshal() encodes []byte slices as base64-encoded strings because JSON does not have a native representation for raw bytes. Base64 encoding represents binary data using a sequence of printable ASCII characters.

Solution: Recovering Original Binary Data

To retrieve the original binary data from the base64-encoded string in the JSON, simply decode the string using the base64.StdEncoding.DecodeString function:

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

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

The above is the detailed content of How to Handle Binary Data in Go JSON Encoding?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn