如何使用redis-py将dict设置为json对象?

kkbh8khc  于 2023-05-16  发布在  Redis
关注(0)|答案(2)|浏览(144)

redis-py4.0开始,支持json。我在Windows 11上使用redis-py版本4.0.2。我有一个redis服务器,在docker中使用redislabs/rejson:latest运行。
我正在尝试通过以下方式加载JSON对象-

import redis
from redis.commands.json.path import Path
from redis import exceptions
from redis.commands.json.decoders import unstring, decode_list

r = redis.Redis()
d = {"hello": "world", b"some": "value"}
r.json().set("somekey", Path.rootPath(), d)

只是它是如何在测试中完成的-https://github.com/redis/redis-py/blob/e8bcdcb97b8c915e2bb52353aeda17c00e1be215/tests/test_json.py#L19
但是我得到了这个错误-

TypeError: keys must be str, int, float, bool or None, not bytes

我错过了什么?

a2mppw5e

a2mppw5e1#

你的json中有一个B前缀,它代表字节。
只需从b"some":中删除'b',它就可以按预期工作:

d = {"hello": "world", "some": "value"}
sczxawaw

sczxawaw2#

这将修复它(添加decode_keys=True来解码任何二进制密钥):

r.json().set("somekey", Path.rootPath(), d, decode_keys=True)

相关问题