Beim Zuordnen der Ausgabe eines Dienstes, der boolesche Werte inkonsistent als 0 und falsch (oder 1 und wahr) darstellt, wird es Es wird notwendig, beim Unmarshalling einen freizügigeren Ansatz zu wählen. Auch wenn das Hinzufügen einer Zeichenfolge zu JSON-Tags möglicherweise nicht ausreicht, stehen alternative Lösungen zur Verfügung.
Eine Lösung besteht darin, einen benutzerdefinierten Typ wie ConvertibleBoolean zu definieren, um Mehrdeutigkeiten zu behandeln boolesche Werte. Dieser Typ enthält eine UnmarshalJSON-Methode, die die Eingabedaten basierend auf den angegebenen Konventionen in einen booleschen Wert umwandelt.
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 }
Dieser benutzerdefinierte Typ stellt sicher, dass Eingabewerte wie „1“ und „0“ als boolesche Werte interpretiert werden , was ein fehlerfreies Parsen ermöglicht.
Es ist wichtig, dies zu beachten, um den Brauch zu verstehen Damit die UnmarshalJSON-Methode ordnungsgemäß funktioniert, muss sie als Zeigermethodenempfänger implementiert werden. Dies liegt daran, dass Zeiger Änderungen am zugrunde liegenden Wert ermöglichen.
Mit diesem Ansatz können Sie mehrdeutige boolesche Werte effektiv aus JSON-Daten entfernen und so sicherstellen, dass die resultierende Struktur trotz der Inkonsistenzen in den Eingabedaten die erwarteten Werte enthält .
Das obige ist der detaillierte Inhalt vonWie kann ich beim Unmarshalling von JSON mit mehrdeutigen booleschen Werten (0/1, wahr/falsch) umgehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!