Lors du démarshaling de données JSON, il est souvent souhaitable de traiter les objets imbriqués comme des valeurs opaques, plutôt que de les analyser en types Go. Ceci peut être réalisé en utilisant le type RawMessage fourni par le package encoding/json.
Considérez la structure JSON et Go suivante :
{ "id": 15, "foo": { "foo": 123, "bar": "baz" } }
type Bar struct { Id int64 Foo []byte }
Tentative Unmarshal ce JSON dans la structure Bar donne les résultats suivants erreur :
json: cannot unmarshal object into Go value of type []uint8
Pour conserver l'objet imbriqué sous forme de chaîne ou de tranche d'octets, utilisez le type RawMessage :
type Bar struct { Id int64 Foo json.RawMessage }
Comme décrit dans la documentation , RawMessage est un objet JSON codé brut qui implémente à la fois Marshaler et Unmarshaler interfaces.
Voici un exemple fonctionnel :
package main import ( "encoding/json" "fmt" ) var jsonStr = []byte(`{ "id": 15, "foo": { "foo": 123, "bar": "baz" } }`) type Bar struct { Id int64 Foo json.RawMessage } func main() { var bar Bar if err := json.Unmarshal(jsonStr, &bar); err != nil { panic(err) } fmt.Printf("%+v", bar) }
Sortie :
{Id:15 Foo:[123 32 34 102 111 111 34 58 32 49 50 51 44 32 34 98 97 114 34 58 32 34 98 97 122 34 32 125]}
[Aire de jeux lien](https://play.golang.org/p/L2yJj2e72dS)
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!