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
Susan Sarandonoriginal
2024-12-09 00:19:15317parcourir

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
}

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!

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