Maison > développement back-end > Golang > le corps du texte

Comment conserver le contenu de la chaîne d'origine lors du rassemblement d'un champ « []byte » dans une structure Go en tant que JSON ?

Mary-Kate Olsen
Libérer: 2024-11-06 11:04:02
original
203 Les gens l'ont consulté

How to Preserve Original String Content When Marshaling a `[]byte` Field in a Go Struct as JSON?

Marshaling JSON []byte as Strings

Question :

En Go, lors de l'encodage une structure contenant un champ []byte au format JSON, le JSON résultant inclut une représentation sous forme de chaîne non attendue du contenu de la tranche. Par exemple, le code :

type Msg struct {
    Content []byte
}

func main() {
    helloStr := "Hello"
    helloSlc := []byte(helloStr)
    json, _ := json.Marshal(Msg{helloSlc})
    fmt.Println(string(json))
}
Copier après la connexion

Produit la chaîne JSON :

{"Content":"SGVsbG8="}
Copier après la connexion

Quelle conversion est effectuée par json.Marshal sur le contenu de la tranche, et comment le contenu de la chaîne d'origine peut-il être préservé ?

Réponse :

Encodage Base64

Par défaut, la fonction json.Marshal de Go encode []les tableaux d'octets comme Chaînes codées en base64 pour représenter les octets bruts dans JSON. Selon la spécification JSON, JSON n'a pas de représentation native pour les octets bruts.

Marshaling personnalisé :

Pour préserver le contenu de la chaîne d'origine, un marshaling personnalisé peut être implémenté en définissant une méthode MarshalJSON personnalisée pour la structure Msg :

import (
    "encoding/json"
    "fmt"
)

type Msg struct {
    Content []byte
}

func (m Msg) MarshalJSON() ([]byte, error) {
    return []byte(fmt.Sprintf(`{"Content": "%s"}`, m.Content)), nil
}

func main() {
    helloStr := "Hello"
    helloSlc := []byte(helloStr)
    json, _ := json.Marshal(Msg{helloSlc})
    fmt.Println(string(json))
}
Copier après la connexion

Cette implémentation personnalisée encode le champ Contenu sous forme de chaîne dans l'objet JSON, préservant son contenu d'origine.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!