将JSON字符串解组为常量

腓特烈大帝

在我的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界面,但我认为不能真正将其用于恒定值。

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

nm

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
}

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

请注意,您可以实现比较通用的encoding/TextUnmarshaler,而不是通过改变UnmarshalJSONUnmarshalText上面。

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

可以说,将字符串基类型用于Operator可能更简单:http : //play.golang.org/p/FCCg1NOeYw

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

json:无法将字符串解组为main.test_struct类型的Go值

如果将值为null的字符串编码的json int解组,则使用null之前的值

json:无法将字符串解组为[] main.KVU类型的Go值

Golang:JSON:如何将字符串数组解组为[] int64

Docker返回“ json:无法将字符串解组为[] string类型的Go值”

如何使用go的json标签将数字和字符串属性解组为字符串值

将“ XML元素”解组为字符串属性

得到:无法将字符串解组为Go值

如何将空字符串解组为nil

JSON解组整数字段为字符串

始终将JSON解组为某些类型(字符串)

Golang:以字符串为键解组json的最佳方法

Python:将外部文件“包含”为字符串常量

Javascript将字符串常量定义为速记属性

解组字符串化的json

将字符串解析为JSON

将字符串解析为JSON

将字符串解析为JSON

将枚举常量的FQN解析为不拆分字符串的枚举常量

无法将字符串解组为int64类型的Go值

将嵌套的字符串切片解组为 float32

如何将嵌套的XML元素解组为字符串数组?

Golang-无法将数字解组为字符串类型的Go值

无法将字符串解组为struct类型的Go值

如何将Akka HTTP请求实体解组为字符串?

JSON无法将对象解组为字符串类型的GO值

将json数组解组到go struct中(数组位于JSON字符串的中间

参考常量为字符串

获取错误:无法解析 Dockerrun JSON 文件:json:字符串结构标记的使用无效,试图将未加引号的值解组为 int