Le marshalling de json.RawMessage renvoie une chaîne codée en base64
Question :
Lors du marshalling d'un json.RawMessage, pourquoi la sortie est-elle une chaîne codée en base64 au lieu du JSON brut ?
Contexte :
Le code ci-dessous illustre le problème :
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 attendue :
{"foo":"bar"}
Sortie réelle :
"eyJmb28iOiJiYXIifQ=="
Réponse :
La méthode MarshalJSON du type json.RawMessage renvoie simplement la tranche d'octets sous-jacente. Cependant, pour que json.RawMessage fonctionne correctement, la valeur transmise à json.Marshal doit être un pointeur.
Solution :
Pour résoudre le problème, mettez à jour le code comme suit :
j, err := json.Marshal(&raw)
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!