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) }
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!