Maison >développement back-end >Golang >Comment gérer le démarshalling booléen à partir de JSON avec \'0\' et \'false\' (et \'1\' et \'true\') ?

Comment gérer le démarshalling booléen à partir de JSON avec \'0\' et \'false\' (et \'1\' et \'true\') ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-26 10:11:13121parcourir

How to Handle Boolean Unmarshalling from JSON with

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn