问题现象:
使用类似如下的语句向 redis 插入数据和取得数据时:
redis.set("abc", "{'ab': 'c'}")
redis.get("abc")
执行上述语句,输出结果类似如下:
b"{'ab': 'c'}"
问题原因:
由于某些原因,redis.keys() 返回带有字节对象的列表,例如[b'abcde']
,但一般我们需要的是是一个str
对象。
解决方式:
1、初始化 redis 时做类似如下操作:
r = redis.StrictRedis('localhost', 6379, charset="utf-8", decode_responses=True)
即配置 Redis 客户端,以使用构造函数的 decode_responses
参数将响应从字节自动转换为字符串 StrictRedis。
2、拿到结果后,先执行 decode 操作,再执行 dumps ,最后执行 loads,示例代码如下:
json.loads(json.dumps(json_obj.decode()))
其中 json_obj 为需要转换的 json 对象。