Heim  >  Artikel  >  Backend-Entwicklung  >  Wie entmarshallt man JSON-Daten dynamisch basierend auf einem Codewert?

Wie entmarshallt man JSON-Daten dynamisch basierend auf einem Codewert?

Linda Hamilton
Linda HamiltonOriginal
2024-10-31 04:22:02838Durchsuche

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

Beliebiges Daten-Unmarshalling

In vielen Szenarien ist es notwendig, JSON-Daten auf flexible Weise zu entmarshallen, damit sich der Unmarshalling-Prozess an unterschiedliche anpassen kann Datenstrukturen basierend auf einem vorgegebenen Codewert. Dies ermöglicht eine dynamische Interpretation von Daten, die aus verschiedenen Quellen empfangen werden.

Stellen Sie sich beispielsweise eine JSON-Nachricht vor, die ein „Code“-Feld enthält, das den Typ der im „Payload“-Feld enthaltenen Daten angibt. Das Feld „Payload“ könnte je nach „Code“-Wert eine andere Datenstruktur darstellen.

Um dies zu erreichen, können wir die folgende Technik verwenden:

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

In diesem Beispiel wird das Die MyUnmarshall-Funktion empfängt eine JSON-Nachricht, speichert die Felder „Code“ und „Nutzlast“ in einer Nachrichtenstruktur und erstellt dann dynamisch eine Datenstrukturinstanz basierend auf dem Wert „Code“. Anschließend wird das Feld „Payload“ in die entsprechende Struktur entmarshallt und die gewünschten Aktionen an den entmarshallten Daten ausgeführt.

Das obige ist der detaillierte Inhalt vonWie entmarshallt man JSON-Daten dynamisch basierend auf einem Codewert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn