Невозможно преобразовать строковую карту в json - PullRequest
0 голосов
/ 04 июля 2018

Я хотел бы сделать JSON из хэша, полученного от Redis, используя Redigo :

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 голосов
/ 04 июля 2018

Переменная jmap имеет тип []byte. Вызов JSON-кодировщика в c.JSON() marshals []byte в виде строки в кодировке base64, как вы видите в выводе.

Чтобы устранить проблему, используйте один уровень кодирования JSON, передав карту непосредственно в c.JSON:

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, вы можете использовать его напрямую:

hashMap, err := redis.StringMap(conn.Do("HGETALL", MyDict))
if err != nil {
    // handle error
}    
c.JSON(200, hashMap)
...