Unmarshalling willkürlicher JSON-Daten
Frage:
Können JSON-Daten auf eine Art und Weise gemarshallt werden? das es ermöglicht, es in Teilen oder Abschnitten zu entmarshallen? In diesem Szenario definiert die obere Hälfte der Daten einen „Code“, der den Datentyp in der unteren Hälfte angibt, der zwischen den Strukturen variieren kann. Wie kann dies in Go erreicht werden?
Antwort:
Um beliebige JSON-Daten zu entmarshallen, bei denen die untere Hälfte zwischen den Strukturen variieren kann, können Sie das Parsen der unteren Hälfte verzögern, bis der „Code“ aus der oberen Hälfte ist bekannt.
Implementierung:
Beispielcode:
<code class="go">package main import ( "encoding/json" "fmt" ) type Message struct { Code int Payload json.RawMessage } type Range struct { Start int End int } type User struct { ID int Pass int } func MyUnmarshall(m []byte) { var message Message var payload interface{} json.Unmarshal(m, &message) switch message.Code { case 3: payload = new(User) case 4: payload = new(Range) } json.Unmarshal(message.Payload, payload) 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>
Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich beliebige JSON-Daten mit unterschiedlichen Strukturen basierend auf einem „Code'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!