Maison  >  Article  >  développement back-end  >  Comment désassembler les données JSON de manière dynamique en fonction d'une valeur de code ?

Comment désassembler les données JSON de manière dynamique en fonction d'une valeur de code ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-31 04:22:02838parcourir

How to Unmarshall JSON Data Dynamically Based on a Code Value?

Désorganisation arbitraire des données

Dans de nombreux scénarios, il est nécessaire de désorganiser les données JSON de manière flexible, permettant au processus de désorganisation de s'adapter à différents des structures de données basées sur une valeur de code prédéterminée. Cela permet une interprétation dynamique des données reçues de diverses sources.

Par exemple, considérons un message JSON qui contient un champ « code », qui spécifie le type de données contenues dans le champ « charge utile ». Le champ « payload » pourrait représenter une structure de données différente selon la valeur du « code ».

Pour y parvenir, on peut utiliser la technique suivante :

<code class="go">package main

import (
    "encoding/json"
    "fmt"
)

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

// Define the possible data structures that can be unmarshalled from the "payload" field
type Range struct {
    Start int
    End   int
}
type User struct {
    ID   int
    Pass int
}

// Custom unmarshalling function
func MyUnmarshall(m []byte) {
    var message Message
    var payload interface{}
    json.Unmarshal(m, &message) // delay parsing until we know the color space

    // Determine the data structure based on the "code" field
    switch message.Code {
    case 3:
        payload = new(User)
    case 4:
        payload = new(Range)
    }

    // Unmarshall the "payload" field into the appropriate data structure
    json.Unmarshal(message.Payload, payload) //err check ommited for readability

    // Do something with the unmarshalled data
    fmt.Printf("\n%v%+v", message.Code, payload)
}

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>

Dans cet exemple, le La fonction MyUnmarshall reçoit un message JSON, stocke les champs « code » et « payload » dans une structure Message, puis crée dynamiquement une instance de structure de données basée sur la valeur « code ». Il désorganise ensuite le champ « charge utile » dans la structure appropriée et exécute les actions souhaitées sur les données non organisé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