Heim > Backend-Entwicklung > Golang > Wie gehe ich mit dem booleschen Unmarshalling von JSON mit „0' und „false' (und „1' und „true') um?

Wie gehe ich mit dem booleschen Unmarshalling von JSON mit „0' und „false' (und „1' und „true') um?

Linda Hamilton
Freigeben: 2024-11-26 10:11:13
Original
185 Leute haben es durchsucht

How to Handle Boolean Unmarshalling from JSON with

Boolesche Werte aus JSON mit 0 und Falsch entmarshallen

Das Parsen von JSON-Daten erfordert eine sorgfältige Prüfung der Datentypen, um Fehlinterpretationen zu vermeiden. In Fällen, in denen ein Dienst boolesche Werte als 0 und falsch (sowie 1 und wahr) austauscht, ist die Erzielung eines ordnungsgemäßen Unmarshallings von entscheidender Bedeutung.

Das integrierte Paket „encoding/json“ bietet eine Methode zum Anpassen des Unmarshalling-Prozesses mithilfe benutzerdefinierter Typen . Durch die Definition eines benutzerdefinierten Typs können Sie eine maßgeschneiderte Unmarshalling-Logik implementieren, um die gewünschte Konvertierung durchzuführen.

Benutzerdefinierter Unmarshalling-Typ

Erstellen Sie einen benutzerdefinierten Typ, der die json.Unmarshaler-Schnittstelle implementiert . Dieser Typ ist für die Konvertierung von JSON-Daten in das gewünschte boolesche Format verantwortlich.

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 diesem Beispiel ist ConvertibleBoolean ein benutzerdefinierter boolescher Typ, der die json.Unmarshaler-Schnittstelle implementiert. Es überschreibt den standardmäßigen JSON-Unmarshalling-Prozess und prüft die eingehenden Daten als Zeichenfolge. Wenn eine Zeichenfolge identifiziert wird, die „true“ oder „false“ darstellt (oder deren numerische Gegenstücke 1 und 0), wird der ConvertibleBoolean-Wert entsprechend festgelegt. Andernfalls wird ein Fehler zurückgegeben.

Verwenden des benutzerdefinierten Typs

Da Sie nun über einen benutzerdefinierten Unmarshalling-Typ verfügen, verwenden Sie ihn in einer Struktur, um die erwartete JSON-Struktur zu definieren.

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

Beispiel Unmarshalling

Wenn der benutzerdefinierte Typ vorhanden ist, können Sie JSON-Daten in eine MyType-Struktur entmarshallen und dabei sowohl 0 als auch false (sowie 1 und true) korrekt in boolesche Werte konvertieren.

input_json := `{
    "field1" : true,
    "field2" : 1
}`

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

Diese Beispiel-JSON-Daten enthalten „true“ und „1“, die vom Standard-Unmarshaller als unterschiedliche Typen behandelt würden. Durch die Verwendung von ConvertibleBoolean werden jedoch beide Werte korrekt als wahr entmarshallt.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit dem booleschen Unmarshalling von JSON mit „0' und „false' (und „1' und „true') um?. 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