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

Mary-Kate Olsen
Freigeben: 2024-10-31 21:27:02
Original
1014 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!