将嵌套对象发布到Redis



不知道这与Redis有多大关系,我认为这是我对Python理解的差距。

如果我有一个字典,它的值是一个简单的值,这很好:

obj = {'key': 'value'}
redis.publish('ch', obj)

但是,如果字典的值是字典,它就会失败:

# from the console in debug mode:
>>> {key: value}
{'tray_info': b'{"rows_count":0,"columns_count":0}'}
>>> redis.publish('ch', {key: value})
TypeError: Argument {'tray_info': b'{"rows_count":0,"columns_count":0}'} expected to be of bytearray, bytes, float, int, or str type

如果我将dict值转换为字符串,我就可以发布redis:

if isinstance(value, bytes):
v = value.decode('utf8')
message = json.dumps({key: v})
else:
message = json.dumps({key: value}).encode('utf-8')
redis.publish('ch', message)

但是,发布的消息有一个字符串值,即字典的字符串化版本。

在我的JS客户端中,我必须将其转换回JSON,并且我必须以某种方式检查我的值是否为";合法字符串";或者如果它是一个JSON,那么它就变得荒谬了。

我想我缺少的关于python的一些相对简单的东西。我该怎么做?

根据文档,Redis不支持嵌套映射:

Redis哈希是字符串字段和字符串值之间的映射

最新更新