Heim > Artikel > Backend-Entwicklung > Wie entmarshallt man JSON-Daten dynamisch basierend auf einem Codewert?
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!