Maison >développement back-end >Golang >Comment désorganiser les données JSON arbitraires dans des sections basées sur un code ?

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-31 21:27:021113parcourir

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>

À 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>

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>

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!

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