JSON mit Variantenstrukturen dekodieren
Der Endpunkt, den Sie konsumieren, gibt JSON in verschiedenen Formaten zurück, manchmal als String und manchmal als Array. Um diese Inkonsistenz zu bewältigen, untersucht die folgende Frage den besten Ansatz zum Entwerfen einer Go-Struktur, die beide Typen unterstützen kann.
Die Frage:
Wie kann ich ein Go erstellen? Struktur, die JSON-Daten mit Variablentypen, entweder einem String oder einem Array von Strings, entmarshalieren kann? Gibt es eine elegante Lösung, die über den Versuch hinausgeht, in zwei separate Strukturen zu dekodieren?
Die Antwort:
Ein ausgefeilterer Ansatz beinhaltet das Unmarshaling des JSON in einen Schnittstellentyp{}. Dieser typunabhängige Ansatz ermöglicht die dynamische Handhabung verschiedener Werttypen.
Um diese Technik zu implementieren, erstellen Sie eine Struktur mit einem Feld vom Typ interface{}, wie im folgenden Beispiel gezeigt:
<code class="go">type Response struct { Message interface{} `json:"message"` }</code>
Beim Unmarshaling der JSON-Daten in dieser Struktur können Sie einen Typschalter oder eine Typzusicherung verwenden, um den tatsächlichen Typ des Nachrichtenfelds zu bestimmen. Dadurch können Sie die Daten entsprechend verarbeiten.
Hier ist eine Beispielimplementierung:
<code class="go">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>
Ausgabe:
Success, message: Message Error, code: [ERROR_CODE]
Durch die Verwendung des Interface{}-Ansatzes gewinnen Sie Flexibilität bei der Handhabung von JSON-Daten unterschiedlicher Typen, wodurch Ihre Codebasis vereinfacht wird.
Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich JSON-Daten mit Variablentypen: String oder Array von Strings?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!