Désorganisation des booléens JSON avec plusieurs représentations
Lors de la désorganisation de JSON en un type booléen, la fonction d'encodage/json unmarshal intégrée attend des valeurs telles comme « vrai » et « faux ». Cependant, certains services peuvent échanger "0" et "false" (ainsi que "1" et "true") pour les types booléens.
Pour s'adapter à cette flexibilité, il est possible de créer une fonction de démarshalisation personnalisée qui convertit valeurs de chaîne telles que "0", "1", "false" et "true" à la représentation booléenne souhaitée.
Voici un exemple de type personnalisé ConvertibleBoolean qui peut être utilisé pour désassembler des valeurs booléennes avec plusieurs représentations :
import ( "encoding/json" "errors" ) 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 }
Avec ce type personnalisé, vous pouvez définir une structure avec des champs de type ConvertibleBoolean et désorganiser les données JSON contenant "0" et "false" comme booleans :
type MyType struct { AsBoolean ConvertibleBoolean `json:"field1"` AlsoBoolean ConvertibleBoolean `json:"field2"` }
Lors du démarshaling du JSON d'entrée avec des valeurs booléennes convertibles, les champs ConvertibleBoolean dans la structure sera correctement renseigné :
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"
En utilisant une fonction de démarshaling personnalisée comme ConvertibleBoolean, il est possible de gérer des valeurs booléennes avec plusieurs représentations dans les données JSON lors du démarshaling dans les structures Go.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!