Maison > développement back-end > Golang > Comment gérer plusieurs représentations booléennes JSON lors du déclassement dans Go ?

Comment gérer plusieurs représentations booléennes JSON lors du déclassement dans Go ?

Susan Sarandon
Libérer: 2024-12-09 00:19:15
original
342 Les gens l'ont consulté

How to Handle Multiple JSON Boolean Representations When Unmarshalling in Go?

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
}
Copier après la connexion

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"`
}
Copier après la connexion

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"
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal