Fri*_*oße 7 json go unmarshalling
在我的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"`
}
Run Code Online (Sandbox Code Playgroud)
我期望的JSON看起来如下:
{
"operator": "EQUALS",
"field": "name",
"values": [ "John", "Doe" ]
}
Run Code Online (Sandbox Code Playgroud)
我可以创建一个映射,以便json.Unmarshal在Filter结构中设置正确的运算符常量吗?我知道Unmarshaler接口,但我认为这不能真正用于常量值.
我真的希望将常量保留在我的代码中,因为当我传递它时,这很好地强制执行类型检查和一致性.
该encoding/json Unmarshaler
界面将与工作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
}
Run Code Online (Sandbox Code Playgroud)
JSON解码器将从结构中获取Operator
字段的地址Filter
并UnmarshalJSON
在其上调用方法.
请注意,您可以encoding/TextUnmarshaler
通过更改UnmarshalJSON
为UnmarshalText
上面来实现更通用的.
这是一个游乐场的例子:http://play.golang.org/p/szcnC6L86u
可以说,对于运算符使用字符串基类型可能更简单:http://play.golang.org/p/FCCg1NOeYw
归档时间: |
|
查看次数: |
2294 次 |
最近记录: |