Go把Map转成对象

最近使用了Redis的Hash,把一个对象给存储到了hash里面,具体如下:

 现在需要从RedisHash缓存里面把结果给取出来,同时赋值到一个对象上面

result, err := global.GVA_REDIS.HGetAll(context.Background(), key).Result()

问题是result是一个  map[string]string 类型,我们直接把map[string][string]给序列化成json字符串,是不符合我们预想的,因为map的值是string类型(为什么map的值不存int类型?因为redis只能存储字符串),但是对象上面有些属性是int类型的,导致我们反序列化失败

既然不能直接序列化map成为一个符合我们结果的json字符串,我们就自己构建一个json字符串

		j := "{"
		for k, v := range result {
			j += "\"" +k + "\"" + ":" + v + ","
		}
		j =j[:len(j)-1]
		j += "}"
        err = json.Unmarshal([]byte(j), &ExamDetail)

然后我们再使用反序列化即可成功了

补充:

当一个对象被存储在Redis的Hash里面的时候,如果原本是int类型,那存储到Hash的时候,是没有字符串的两个"",如果是string类型,是会有"" ,但是其实两个value本质都是string,我们正是通过这个关键点,把map给反序列化到结构体上了,并成功对应其各种类型

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值