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