Heim > Backend-Entwicklung > Golang > Wie kann ich das JSON-Unmarshaling anpassen, um mehrdeutige boolesche Werte zu verarbeiten?

Wie kann ich das JSON-Unmarshaling anpassen, um mehrdeutige boolesche Werte zu verarbeiten?

Barbara Streisand
Freigeben: 2024-11-29 05:49:09
Original
247 Leute haben es durchsucht

How Can I Customize JSON Unmarshaling to Handle Ambiguous Boolean Values?

Erweitern der Booleschen Parsing-Optionen im JSON-Unmarshaling

Beim Zuordnen von Dienstausgaben, die die Grenzen zwischen booleschen Typen und anderen Werten verwischen, ist ein entgegenkommenderes JSON erforderlich Parser wird unverzichtbar. Die integrierte Codierungs-/JSON-Unmarshal-Funktion ist in dieser Hinsicht unzureichend und veranlasst die Suche nach freizügigen Parsing-Alternativen.

Ein Ansatz besteht darin, eine benutzerdefinierte UnmarshalJSON-Funktion für den gewünschten Typ zu erstellen. Diese Funktion kann benutzerdefinierte Parsing-Regeln definieren, um die mehrdeutigen booleschen Werte zu verarbeiten. Betrachten Sie beispielsweise den folgenden ConvertibleBoolean-Typ:

type ConvertibleBoolean bool

func (bit *ConvertibleBoolean) UnmarshalJSON(data []byte) error {
    asString := string(data)
    if asString == "1" || asString == "true" {
        *bit = true
    } else if asString == "0" || asString == "false" {
        *bit = false
    } else {
        return errors.New(fmt.Sprintf("Boolean unmarshal error: invalid input %s", asString))
    }
    return nil
}
Nach dem Login kopieren

In dieser Funktion werden die Zeichenfolgen „1“ und „true“ auf „true“ abgebildet, während „0“ und „false“ als „false“ analysiert werden. Werte außerhalb dieser Bereiche lösen einen Fehler aus.

Um diese benutzerdefinierte boolesche Analyse zu nutzen, wenden Sie ein JSON-Tag auf das Zielfeld an. Zum Beispiel:

type MyType struct {
    AsBoolean ConvertibleBoolean `json:"field1"`
    AlsoBoolean ConvertibleBoolean `json:"field2"`
}
Nach dem Login kopieren

Wenn diese benutzerdefinierten Parsing-Regeln vorhanden sind, erzeugt die JSON-Eingabe:

{
    "field1": true,
    "field2": 1
}
Nach dem Login kopieren

die folgende nicht gemarshallte Struktur:

obj := MyType{}
json_err := json.Unmarshal([]byte(input_json), &obj)
fmt.Printf("%v\n", obj.AsBoolean) //"true"
fmt.Printf("%v\n", obj.AlsoBoolean) //"true"
Nach dem Login kopieren

Von Durch die Nutzung benutzerdefinierter Parsing-Funktionen gewinnen Sie Flexibilität beim JSON-Unmarshaling und können so mit mehrdeutigen booleschen Werten umgehen benötigt.

Das obige ist der detaillierte Inhalt vonWie kann ich das JSON-Unmarshaling anpassen, um mehrdeutige boolesche Werte zu verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage