In einem Szenario, in dem ein konsumierter Endpunkt JSON in verschiedenen Formaten zurückgibt, ist es entscheidend, einen eleganten Ansatz für den Umgang mit diesen Variationen zu finden . Das Dilemma entsteht durch die unveränderliche Natur des Endpunkts.
Eine gängige Strategie besteht darin, mehrere Strukturen zum Dekodieren zu verwenden, zu versuchen, in eine Struktur zu dekodieren, die eine Zeichenfolge erwartet, und bei Auftreten eines Fehlers zu einer alternativen Struktur mit einem Array zu wechseln. Während diese Methode die gewünschte Funktionalität erreicht, gibt es möglicherweise einen verfeinerten Ansatz.
Eine empfohlene Lösung besteht darin, den JSON in einen Interface{}-Wert zu entmarshalieren. Dieser Wert kann dann mithilfe von Typzusicherungen oder Typschaltern untersucht werden, um seinen tatsächlichen Typ zu bestimmen.
Ein Beispiel in Go demonstriert die Wirksamkeit dieses Ansatzes:
<code class="go">type Response struct { Message interface{} `json:"message"` } func main() { inputs := []string{ `{"message":"Message"}`, `{"message":["ERROR_CODE"]}`, } for _, input := range inputs { var r Response if err := json.Unmarshal([]byte(input), &r); err != nil { panic(err) } switch x := r.Message.(type) { case string: fmt.Println("Success, message:", x) case []interface{}: fmt.Println("Error, code:", x) default: fmt.Println("Something else:", x) } } }</code>
Die Ausgabe zeigt die erfolgreiche Handhabung und Unterscheidung der JSON-Antwortformate:
Success, message: Message Error, code: [ERROR_CODE]
Durch die Nutzung dieses Ansatzes können Sie problemlos mit verschiedenen JSON-Formaten umgehen, sodass keine mehreren Strukturen oder Fehlerbehandlungen erforderlich sind.
Das obige ist der detaillierte Inhalt vonWie kann man JSON-Antworten mit unterschiedlichen Formaten elegant verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!