Maison > développement back-end > Golang > Pourquoi le marshaling de []byte vers JSON génère-t-il une chaîne codée en Base64 ?

Pourquoi le marshaling de []byte vers JSON génère-t-il une chaîne codée en Base64 ?

Susan Sarandon
Libérer: 2024-12-07 14:34:13
original
525 Les gens l'ont consulté

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

Marshaling []byte vers JSON : Comprendre la représentation de chaîne

Lorsque vous essayez de marshaler des valeurs []byte au format JSON, vous pouvez rencontrer des problèmes particuliers des sorties de chaîne comme celle mise en évidence dans la question d'origine. Cet article aborde les deux côtés de l'énigme : comment marshaler correctement []byte en JSON et pourquoi la sortie se transforme en chaîne observée.

Solution : Marshaling []byte en JSON

Selon la documentation officielle de Golang pour json.Marshal, les valeurs de tableau et de tranche sont codées sous forme de tableaux JSON. Une exception à cette règle s'applique aux tranches []byte, qui sont spécifiquement codées sous forme de chaînes codées en base64. À l'inverse, les tranches nulles sont codées sous forme d'objets JSON nuls.

Par conséquent, pour marshaler avec précision []byte en JSON, il doit être explicitement converti en chaîne codée en base64 pendant le processus de marshaling.

Raison : Encodage Base64 pour []byte

Le comportement observé dans l'original Le résultat de la question est une conséquence directe du mécanisme de codage utilisé pour les tranches []byte dans JSON. JSON ne peut pas représenter nativement des tranches d'octets bruts ; par conséquent, ils sont convertis en chaînes codées en base64. Le codage Base64 permet la représentation de données binaires sous forme de chaîne, ce qui les rend adaptées à la transmission et au stockage dans des formats texte tels que JSON.

Par exemple, la chaîne « AAAAQID » vue dans la sortie représente le code base64. version codée de la []byte slice [0, 0, 0, 1, 2, 3].

Pour récupérer la tranche d'octets d'origine depuis sa base64 représentation, vous pouvez utiliser la fonction base64.StdEncoding.DecodeString, comme illustré dans le code ci-dessous :

import "encoding/base64"

func decodeBase64(encodedString string) ([]byte, error) {
    return base64.StdEncoding.DecodeString(encodedString)
}
Copier après la connexion

Conclusion

Marshaling []byte to JSON implique explicitement les coder sous forme de chaînes base64, une technique motivée par la nécessité de représenter des données binaires dans un format texte. Comprendre ce mécanisme de codage permet de démystifier les sorties de chaîne apparemment étranges rencontrées lors du processus de marshaling.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal