Maison >développement back-end >Golang >Pourquoi le regroupement d'une valeur json.RawMessage donne-t-il une chaîne codée en base64 au lieu d'un JSON brut ?

Pourquoi le regroupement d'une valeur json.RawMessage donne-t-il une chaîne codée en base64 au lieu d'un JSON brut ?

DDD
DDDoriginal
2024-11-12 04:54:01804parcourir

Why does marshalling a json.RawMessage value result in a base64-encoded string instead of raw JSON?

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!

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