Décomposition des valeurs booléennes de JSON avec 0 et False
L'analyse des données JSON nécessite un examen attentif des types de données pour éviter toute interprétation erronée. Dans les cas où un service échange des valeurs booléennes telles que 0 et false (ainsi que 1 et true), il devient crucial de réaliser une désorganisation appropriée.
Le package encoding/json intégré fournit une méthode pour personnaliser le processus de désorganisation à l'aide de types personnalisés. . En définissant un type personnalisé, vous pouvez implémenter une logique de démarshalling sur mesure pour gérer la conversion souhaitée.
Type de démarshalling personnalisé
Créez un type personnalisé qui implémente l'interface json.Unmarshaler . Ce type sera chargé de convertir les données JSON au format booléen souhaité.
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 }
Dans cet exemple, ConvertibleBoolean est un type booléen personnalisé qui implémente l'interface json.Unmarshaler. Il remplace le processus de désorganisation JSON par défaut et vérifie les données entrantes sous forme de chaîne. S'il identifie une chaîne représentant vrai ou faux (ou leurs équivalents numériques 1 et 0), il définit la valeur ConvertibleBoolean en conséquence. Sinon, une erreur est renvoyée.
Utilisation du type personnalisé
Maintenant que vous disposez d'un type de désorganisation personnalisé, utilisez-le dans une structure pour définir la structure JSON attendue.
type MyType struct { AsBoolean ConvertibleBoolean `json:"field1"` AlsoBoolean ConvertibleBoolean `json:"field2"` }
Exemple Démarshalling
Avec le type personnalisé en place, vous pouvez désorganiser les données JSON dans une structure MyType, convertissant correctement 0 et faux (ainsi que 1 et vrai) en valeurs booléennes.
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"
Cet exemple de données JSON contient « true » et « 1 », qui seraient traités comme des types différents par le programme de désagrégation par défaut. Cependant, en utilisant ConvertibleBoolean, les deux valeurs sont correctement considérées comme vraies.
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!