Maison > développement back-end > Golang > Pourquoi le marshaling JSON d'un octet Go [] génère-t-il une chaîne codée en base64 ?

Pourquoi le marshaling JSON d'un octet Go [] génère-t-il une chaîne codée en base64 ?

DDD
Libérer: 2024-12-07 02:46:15
original
195 Les gens l'ont consulté

Why Does JSON Marshaling of a Go []byte Result in a Base64-Encoded String?

Marshalling []byte vers JSON : décoder les mystères

Lors de la tentative de marshalling d'une tranche d'octets ([]byte) au format JSON, il est courant de rencontrer une étrange chaîne codée en sortie. Pour approfondir ce comportement particulier, examinons l'exemple de code fourni dans la question :

type ColorGroup struct {
    ByteSlice    []byte
    SingleByte   byte
    IntSlice     []int
}
...
b, err := json.Marshal(group)
Copier après la connexion

Le processus de marshaling JSON convertit une structure de données Go en sa représentation JSON. Comprendre comment []byte est traité lors de cette conversion est crucial. Selon la documentation Go pour json.Marshal, "[]byte encode comme une chaîne codée en base64."

L'énigme de l'encodage

Ce que cela signifie, c'est que lorsque vous essayez de marshaler un []octet vers JSON, la tranche n'est pas directement incluse sous forme de tableau dans la sortie JSON. Au lieu de cela, il est converti en chaîne codée en base64. Cette conversion est utilisée car JSON n'a pas de type de tranche d'octets natif.

Décodage de la chaîne codée

Pour décoder la chaîne codée dans sa tranche d'octets d'origine, vous peut utiliser le package Go base64. Voici à quoi cela ressemblerait :

import (
    "encoding/base64"
    "log"
)
...
b64 := "AAAAAQID" // encoded byte slice from JSON
b, err := base64.StdEncoding.DecodeString(b64)
if err != nil {
    log.Fatal(err)
}
fmt.Printf("%v", b) // Outputs: [0 0 0 1 2 3]
Copier après la connexion

Pourquoi la chaîne étrange ?

La chaîne codée que vous avez rencontrée est le résultat du processus d'encodage base64. Le codage Base64 remplace les données binaires par un sous-ensemble de caractères ASCII pour les rendre adaptées à la transmission ou au stockage dans des formats non binaires comme JSON. Dans le cas de la tranche d'octets, cet encodage transforme les valeurs d'octets en une représentation sous forme de chaîne.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal