无法将字符串映射转换为json

时间:2018-07-04 20:03:44

标签: json go hash redis redigo

我想使用redigo使用从redis接收的哈希值制作一个json:

func showHashtags(c *gin.Context) {
    hashMap, err := redis.StringMap(conn.Do("HGETALL", MyDict))
    if err != nil {
        fmt.Println(err)
    }    
    fmt.Println(hashMap) //works fine and shows the map 

    m := make(map[string]string)
    for k, v := range hashMap {
        m[k] = v
    }

    jmap, _ := json.Marshal(m)
    c.JSON(200, jmap)
}

但是浏览器中的结果却像是乱码一样

"eyIgIjoiMiIsIjExX9iq24zYsSAiOiIxIiwiQWxsNFJhbWluICI6IjEiLCJCSUhFICI6IjMiLCJCVFNBUk1ZICI6IjIiLCJDTUJZTiAiOiIxI....

这是怎么了?我该如何解决?

1 个答案:

答案 0 :(得分:7)

变量map_line_id_with_text的类型为jmap。如您在输出中看到的,在[]byte中对JSON编码器的调用将c.JSON()作为base64编码的字符串编组。

要解决此问题,请通过将地图直接传递到c.JSON来使用一种JSON编码级别:

[]byte

由于hashMap, err := redis.StringMap(conn.Do("HGETALL", MyDict)) if err != nil { // handle error } m := make(map[string]string) for k, v := range hashMap { m[k] = v } c.JSON(200, m) hashMap,您可以直接使用它:

map[string]string