Maison >développement back-end >Golang >Comment gérer les données binaires dans l'encodage Go JSON ?

Comment gérer les données binaires dans l'encodage Go JSON ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-05 17:30:02499parcourir

How to Handle Binary Data in Go JSON Encoding?

Encodage de []chaînes d'octets en JSON à l'aide de Go

Problème : encodage JSON inattendu de données binaires

Dans Go, une tranche de []octets stocke données binaires brutes. Lorsque vous tentez d'encoder une structure contenant des champs d'octets [] en JSON à l'aide de json.Marshal(), le JSON résultant contient une représentation sous forme de chaîne inattendue du contenu de la tranche au lieu des données binaires d'origine. Par exemple :

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

Raison du codage en base64

json.Marshal() encode des tranches d'octets sous forme de chaînes codées en base64, car JSON n'a pas de représentation native pour les octets bruts. L'encodage Base64 représente les données binaires à l'aide d'une séquence de caractères ASCII imprimables.

Solution : Récupération des données binaires d'origine

Pour récupérer les données binaires d'origine de la chaîne codée en base64 dans le JSON, décodez simplement le chaîne en utilisant la fonction base64.StdEncoding.DecodeString :

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

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn