首页 > 后端开发 > Golang > 在 Go 中解组时如何处理多个 JSON 布尔表示?

在 Go 中解组时如何处理多个 JSON 布尔表示?

Susan Sarandon
发布: 2024-12-09 00:19:15
原创
345 人浏览过

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

使用多个表示形式解组 JSON 布尔值

将 JSON 解组为布尔类型时,内置的编码/json 解组函数需要这样的值为“真”和“假”。但是,某些服务可能会交换布尔类型的“0”和“false”(以及“1”和“true”)。

为了适应这种灵活性,可以创建一个自定义解组函数来转换将“0”、“1”、“false”和“true”等字符串值转换为所需的布尔表示形式。

这是自定义类型的示例ConvertibleBoolean 可用于解组具有多种表示形式的布尔值:

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
}
登录后复制

使用此自定义类型,您可以定义一个具有 ConvertibleBoolean 类型字段的结构体,并将包含“0”和“false”的 JSON 数据解组为布尔值:

type MyType struct {
    AsBoolean ConvertibleBoolean `json:"field1"`
    AlsoBoolean ConvertibleBoolean `json:"field2"`
}
登录后复制

使用可转换布尔值解组输入 JSON 时,结构中的 ConvertibleBoolean 字段将被正确填充:

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"
登录后复制

通过使用像 ConvertibleBoolean 这样的自定义解组函数,当解组到 Go 结构体时,可以处理 JSON 数据中具有多种表示形式的布尔值。

以上是在 Go 中解组时如何处理多个 JSON 布尔表示?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板