Maison >développement back-end >Golang >Pourquoi json.Marshal code-t-il json.RawMessage en Base64 ?

Pourquoi json.Marshal code-t-il json.RawMessage en Base64 ?

DDD
DDDoriginal
2024-11-08 21:40:02966parcourir

Why Does json.Marshal Encode json.RawMessage as Base64?

Marshalling json.RawMessage : déchiffrement de l'encodage Base64

Lors d'une tentative de marshaling d'un objet json.RawMessage, vous pouvez rencontrer un encodage base64 inattendu chaîne en sortie au lieu de la chaîne JSON souhaitée. Pour comprendre ce comportement, examinons le concept sous-jacent.

json.RawMessage, comme son nom l'indique, est conçu pour gérer les données JSON brutes sous forme de tranche d'octets. Lorsque vous tentez de marshaler un RawMessage à l'aide de json.Marshal, le comportement par défaut consiste à l'encoder comme s'il s'agissait d'un octet [] normal. Cela conduit à l'encodage base64 que vous avez observé.

Pour surmonter cela, la solution réside dans le passage d'un pointeur vers le RawMessage à json.Marshal. En effet, la méthode MarshalJSON de RawMessage, qui est responsable du processus de marshaling, attend un pointeur comme argument. Sans le pointeur, il ne peut pas renvoyer correctement la tranche d'octets comme prévu.

En modifiant votre code pour passer un pointeur, comme indiqué ci-dessous, vous récupérerez la chaîne JSON attendue en sortie :

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    raw := json.RawMessage(`{"foo":"bar"}`)
    j, err := json.Marshal(&raw)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(j))
}

Sortie :

{"foo":"bar"}

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!

Déclaration:
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