Maison >développement back-end >Golang >Comment désorganiser les objets imbriqués JSON sous forme de tableaux d'octets dans Go ?

Comment désorganiser les objets imbriqués JSON sous forme de tableaux d'octets dans Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-02 15:13:12412parcourir

How to Unmarshal JSON Nested Objects as Byte Arrays in Go?

Désorganisation des objets imbriqués JSON sous forme de chaînes ou de tableaux d'octets

Lors du traitement des réponses JSON, il peut être nécessaire de conserver certains objets imbriqués sous forme de chaînes brutes ou de tableaux d'octets au lieu de les faire analyser dans des structures Go. Pour résoudre ce problème, nous allons explorer une solution utilisant le type json.RawMessage du package encoding/json.

Dans votre scénario spécifique, le JSON suivant :

{
    "id"  : 15,
    "foo" : { "foo": 123, "bar": "baz" }
}

devait être désorganisé dans une structure Go avec un champ ID de type int64 et un champ Foo de type []byte. L'erreur que vous avez rencontrée, « json : impossible de transformer l'objet en une valeur Go de type []uint8 », indique que le processus de désorganisation tentait d'analyser l'objet foo en une valeur Go, ce qui n'est pas un comportement prévu.

Le type json.RawMessage fournit une solution à ce problème. Comme l'indique sa documentation, il s'agit d'un « objet JSON codé brut » qui peut être utilisé pour retarder le décodage JSON ou précalculer un encodage JSON. En utilisant json.RawMessage, vous pouvez conserver efficacement l'objet foo en tant que tableau d'octets bruts dans votre structure Go :

import (
    "encoding/json"
    "fmt"
)

type Bar struct {
    ID  int64           `json:"id"`
    Foo json.RawMessage `json:"foo"`
}

func main() {
    var jsonStr = []byte(`{
    "id"  : 15,
    "foo" : { "foo": 123, "bar": "baz" }
}`)

    var bar Bar

    err := json.Unmarshal(jsonStr, &bar)
    if err != nil {
        panic(err)
    }
    fmt.Printf("%+v\n", 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]}

En tirant parti de json.RawMessage, vous pouvez maintenant, réussissez à démonter le JSON dans une structure Go qui traite l'objet foo comme un tableau d'octets.

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