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

Comment puis-je désorganiser les objets JSON imbriqués sous forme de chaînes ou de tableaux d'octets dans Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-04 00:48:10699parcourir

How Can I Unmarshal Nested JSON Objects as Strings or Byte Arrays in Go?

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

La désorganisation JSON peut être personnalisée pour gérer les objets imbriqués de manière spécifique. Dans la question, l'objectif est d'analyser un objet JSON, de conserver un objet imbriqué sous forme de chaîne ou de tableau d'octets et d'éviter l'affectation automatique des champs.

Pour y parvenir, le package encoding/json fournit le json.RawMessage taper. Comme décrit dans la documentation, json.RawMessage est un objet JSON encodé brut qui peut être utilisé pour retarder ou précalculer le décodage JSON.

Voici comment utiliser json.RawMessage pour gérer les objets imbriqués dans la chaîne JSON fournie :

package main

import (
    "encoding/json"
    "fmt"
)

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

func main() {
    var bar Bar

    err := json.Unmarshal([]byte(`{
        "id": 15,
        "foo": { "foo": 123, "bar": "baz" }
    }`), &bar)
    if err != nil {
        panic(err)
    }
    fmt.Printf("%+v\n", bar)
}

Dans ce cas, le champ foo de la structure Bar contiendra les octets JSON bruts représentant le objet, plutôt que de le faire analyser dans une structure Go. Le résultat ressemblera à ceci :

{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 utilisant json.RawMessage, vous pouvez contrôler la manière dont les objets JSON imbriqués sont gérés lors du démarshalling, ce qui permet plus de flexibilité dans vos pipelines de traitement de données.

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