Heim  >  Artikel  >  Backend-Entwicklung  >  Wie entmarshallt man beliebige JSON-Daten in Abschnitten basierend auf einem Code?

Wie entmarshallt man beliebige JSON-Daten in Abschnitten basierend auf einem Code?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-31 21:27:02998Durchsuche

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

Unmarshalling beliebiger Daten in JSON

In bestimmten Szenarien kann es notwendig sein, JSON-Daten in Teilen oder Abschnitten zu entmarshallen. Die obere Hälfte der Daten könnte beispielsweise die Aktion angeben, die in der unteren Hälfte ausgeführt werden soll, z. B. das Unmarshalling in eine bestimmte Struktur basierend auf dem „Code“ in der oberen Hälfte.

Betrachten Sie die folgenden Beispielstrukturen:

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

type User struct {
    ID    int
    Pass  int
}</code>

Die JSON-Daten könnten beispielsweise wie folgt aussehen:

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

Um dieses Unmarshalling zu erreichen, können wir das Parsen der unteren Hälfte der JSON-Daten verzögern, bis wir es bestimmt haben der Code in der oberen Hälfte. Betrachten Sie den folgenden Ansatz:

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

Mit diesem Ansatz können Sie je nach angegebenem Code beliebige JSON-Daten effektiv in Abschnitten entmarshallen.

Das obige ist der detaillierte Inhalt vonWie entmarshallt man beliebige JSON-Daten in Abschnitten basierend auf einem Code?. 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