Heim >Backend-Entwicklung >Golang >Wie kann ich das JSON-Unmarshaling anpassen, um mehrdeutige boolesche Werte zu verarbeiten?
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 }
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"` }
Wenn diese benutzerdefinierten Parsing-Regeln vorhanden sind, erzeugt die JSON-Eingabe:
{ "field1": true, "field2": 1 }
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"
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!