json - 无法将字符串映射转换为 json
问题描述
我想使用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....
这里有什么问题?我该如何解决?
解决方案
变量jmap
是 type []byte
。c.JSON()
正如您在输出中看到的那样,对编组中 JSON 编码器的调用[]byte
作为 base64 编码的字符串。
要解决此问题,请通过将映射直接传递给 c.JSON 来使用一级 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
是 a map[string]string
,所以可以直接使用:
hashMap, err := redis.StringMap(conn.Do("HGETALL", MyDict))
if err != nil {
// handle error
}
c.JSON(200, hashMap)
推荐阅读
- swift - SwiftUI:为什么proxy.safeAreaInsets.bottom的高度等于keyboardHeight?
- java - 计算嵌套循环中随机数的平均值?
- openssl - 在 Postman 中复制“openssl dgst”
- javascript - react-google-charts Marker GeoChart 标记不起作用
- javascript - 如何在javascript中删除firebase实时数据库中的节点
- amazon-web-services - AWS:引擎名称 postgres 的存储大小无效
- java - SQLGrammarException:无法准备语句
- c# - 如何在 Selenium WebDriver 中使用 C# 使用 XPATH 定位 DYNAMIC Salesforce Lightning INPUT 元素
- python - 关于使用 ODR 进行曲线拟合的问题
- reactjs - useReducer:也克隆未更改的值?