Maison > développement back-end > Golang > le corps du texte

Comment désorganiser les données JSON arbitraires dans des sections basées sur un code ?

Mary-Kate Olsen
Libérer: 2024-10-31 21:27:02
original
1012 Les gens l'ont consulté

How to Unmarshall Arbitrary JSON Data in Sections Based on a Code?

Dissociation des données arbitraires en JSON

Dans certains scénarios, il peut être nécessaire de dissocier les données JSON en parties ou sections. Par exemple, la moitié supérieure des données peut indiquer l'action à effectuer sur la moitié inférieure, comme la désorganisation dans une structure spécifique basée sur le « code » dans la moitié supérieure.

Considérez les exemples de structures suivants :

<code class="go">type Range struct {
    Start int
    End   int
}

type User struct {
    ID    int
    Pass  int
}</code>
Copier après la connexion

À titre d'exemple, les données JSON pourraient ressembler à ce qui suit :

<code class="json">// Message with "Code" 4, signifying a Range structure
{
    "Code": 4,
    "Payload": {
        "Start": 1,
        "End": 10
    }
}

// Message with "Code" 3, signifying a User structure
{
    "Code": 3,
    "Payload": {
        "ID": 1,
        "Pass": 1234
    }
}</code>
Copier après la connexion

Pour réaliser cette désorganisation, nous pouvons retarder l'analyse de la moitié inférieure des données JSON jusqu'à ce que nous ayons déterminé le code dans la moitié supérieure. Considérez l'approche suivante :

<code class="go">import (
    "encoding/json"
    "fmt"
)

type Message struct {
    Code    int
    Payload json.RawMessage // Delay parsing until we know the code
}

func MyUnmarshall(m []byte) {
    var message Message
    var payload interface{}
    json.Unmarshal(m, &message) // Delay parsing until we know the color space
    switch message.Code {
    case 3:
        payload = new(User)
    case 4:
        payload = new(Range)
    }
    json.Unmarshal(message.Payload, payload) // Error checks omitted for readability
    fmt.Printf("\n%v%+v", message.Code, payload) // Perform actions on the data
}

func main() {
    json := []byte(`{"Code": 4, "Payload": {"Start": 1, "End": 10}}`)
    MyUnmarshall(json)
    json = []byte(`{"Code": 3, "Payload": {"ID": 1, "Pass": 1234}}`)
    MyUnmarshall(json)
}</code>
Copier après la connexion

En utilisant cette approche, vous pouvez efficacement désorganiser les données JSON arbitraires en sections, en fonction du code spécifié.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!