Heim >Backend-Entwicklung >Golang >Wie entmarshaliere ich JSON-Daten mit Variablentypen: String oder Array von Strings?

Wie entmarshaliere ich JSON-Daten mit Variablentypen: String oder Array von Strings?

Linda Hamilton
Linda HamiltonOriginal
2024-10-29 02:58:02478Durchsuche

How to Unmarshal JSON Data with Variable Types: String or Array of Strings?

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!

Stellungnahme:
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