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!