JSON编组接口字节切片时得到奇怪的结果

我正在使用 Redigo Redis 库并尝试 json.Marshal 我从排序集中获得的结果,但我得到如下结果:


"eyJmcm9tSWQiOjEsInRvSWQiOjUsInR5cGUiOjMsInBvc3RJZCI6MSwiY29tbWVudElkIjo0NCwiY3JlYXRlZFRpbWUiOjE0NjMxNTY0ODQsImlzVmlld2VkIjpmYWxzZSwidXNlcm5hbWUiOiJBZG1pbiIsImltYWdlIjoiaHc2ZE5EQlQtMzZ4MzYuanBnIn0="

当我应该得到这个时:


"{"fromId":5,"toId":1,"type":3,"postId":4,"commentId":49,"createdTime":1463161736,"isViewed":false,"username":"Alexander","image":"JZIfHp8i-36x36.png"}"

我有一个通知结构


type Notification struct {

    FromId int64 `json:"fromId"`

    ToId   int64 `json:"toId"`

    OfType int64 `json:"type"`


    PostId       int64  `json:"postId"`

    CommentId    int64  `json:"commentId"`

    CreatedTime  int64  `json:"createdTime"`

    IsViewed     bool   `json:"isViewed"`

    FromUsername string `json:"username"`

    FromImage    string `json:"image"`

}


func New() *Notification {

    return &Notification{

        CreatedTime: time.Now().Unix(),

    }

}

它有一个方法可以将一串 json 保存到 Redis 排序集中。


func (n *Notification) Create(pool *redis.Pool, multicast chan<- []byte) error {

    var err error

    n.FromUsername, err = validation.FilterUsername(n.FromUsername)

    if err != nil {

        return err

    }

    // We can use the same validation as for a username here.

    n.FromImage, err = validation.FilterUsername(n.FromImage)

    if err != nil {

        return err

    }

}

这一切都很好。但后来我想获取这些结果,然后作为 json 格式的字符串数组发送到客户端。我保存在排序集中的相同 json 格式的字符串。


我正在做这样简单的事情。


func ByUserId(userId int64, pool *redis.Pool) (interface{}, error) {

    key := fmt.Sprintf("user:%d:notification", userId)

    c := pool.Get()

    defer c.Close()

    c.Send("ZREVRANGE", key, 0, -1)

    c.Flush()

    return c.Receive()

}

但它不起作用。


我能做什么?



临摹微笑
浏览 92回答 1
1回答

莫回无

函数ByUserId可以写成:func ByUserId(userId int64, pool *redis.Pool) ([]string, error) {&nbsp; key := fmt.Sprintf("user:%d:notification", userId)&nbsp; c := pool.Get()&nbsp; defer c.Close()&nbsp; return redis.Strings(c.Do("ZREVRANGE", key, 0, -1))}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go