gpt4 book ai didi

json - 将 JSON 字符串解码为常量

转载 作者:IT王子 更新时间:2023-10-29 01:18:45 26 4
gpt4 key购买 nike

在我的 Go 代码中,我有以下情况:

type Operator int
const (
UNKNOWN Operator = iota
EQUALS
CONTAINS
BETWEEN
DISTANCE
)

type Filter struct {
Field string `json:"field"`
Operator Operator `json:"operator"`
Values []string `json:"values"`
}

我期望的 JSON 如下所示:

{
"operator": "EQUALS",
"field": "name",
"values": [ "John", "Doe" ]
}

我可以创建这样一个映射 json.Unmarshal将在 Filter 结构中设置正确的运算符常量?我知道 Unmarshaler接口(interface),但我不认为这真的可以用在常量值上..

我真的很想在我的 go 代码中保留这些常量,因为当我传递它们时,这很好地执行了类型检查和一致性。

最佳答案

encoding/json Unmarshaler 接口(interface)将与 Operator 类型一起工作,但它必须有一个指针作为其接收者:

func (o *Operator) UnmarshalJSON(b []byte) error {
str := strings.Trim(string(b), `"`)

switch {
case str == "CONTAINS":
*o = CONTAINS

default:
*o = UNKNOWN
// or return an error...
}

return nil
}

JSON 解码器将从 Filter 结构中获取 Operator 字段的地址,并在其上调用 UnmarshalJSON 方法。

请注意,您可以通过将上面的 UnmarshalJSON 更改为 UnmarshalText 来实现更通用的 encoding/TextUnmarshaler

这是一个 Playground 示例:http://play.golang.org/p/szcnC6L86u

可以说,为运算符使用字符串基类型可能更简单:http://play.golang.org/p/FCCg1NOeYw

关于json - 将 JSON 字符串解码为常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21609363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com