2

在 Linux 上使用 REDIS 的内置 redis-cli 时,我可以毫无问题地输入以下命令

redis-cli -p 6379 mset SWSUIT "{\"D0:\": {\"install\": {\"rules\": [[0.62, -0.34], [-0.00, 4.95], [0.00, 0.00, 0.18]], \"name\": \"DO\", \"slows\": [[[{\"bit\": \"p\", \"order\": 1, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"c\", \"gfx\": 0, \"N\": 4}]], [[{\"bit\": \"p\", \"order\": 2, \"gfx\": 0, \"N\": 4}], [{\"type\": \"c\", \"gfx\": 0, \"N\": 4}]], [[{\"bit\": \"p\", \"order\": 1, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"p\", \"order\": 2, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"c\", \"gfx\": 0, \"N\": 4}]]], \"suit\": [0, 1, 1, 1], \"test\": [1.0, 1.0, 1.0, 1.0]}, \"pal\": [100.0, 100.0, 100.0, 100.0], \"alto\": [0.0, 0.0, 0.0, 0.0]}}"

    r.mset('SWSUIT', '"{\"D0:\": {\"install\": {\"rules\": [[0.62, -0.34], [-0.00, 4.95], [0.00, 0.00, 0.18]], \"name\": \"DO\", \"slows\": [[[{\"bit\": \"p\", \"order\": 1, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"c\", \"gfx\": 0, \"N\": 4}]], [[{\"bit\": \"p\", \"order\": 2, \"gfx\": 0, \"N\": 4}], [{\"type\": \"c\", \"gfx\": 0, \"N\": 4}]], [[{\"bit\": \"p\", \"order\": 1, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"p\", \"order\": 2, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"c\", \"gfx\": 0, \"N\": 4}]]], \"suit\": [0, 1, 1, 1], \"test\": [1.0, 1.0, 1.0, 1.0]}, \"pal\": [100.0, 100.0, 100.0, 100.0], \"alto\": [0.0, 0.0, 0.0, 0.0]}}"
')

在 python 脚本中使用 redis-py 输入此值时,我无法使其工作。我不断收到错误消息,说我必须插入 kwal 或字典。我假设这是因为 python 对引号和反斜杠的解释不同。有什么方法可以在不更改值的情况下执行命令?它的格式必须与上面看到的完全相同。我也试过 os 包来执行命令。

os.system('redis-cli -p 6379 mset SWSUIT "{\"D0:\": {\"install\": {\"rules\": [[0.62, -0.34], [-0.00, 4.95], [0.00, 0.00, 0.18]], \"name\": \"DO\", \"slows\": [[[{\"bit\": \"p\", \"order\": 1, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"c\", \"gfx\": 0, \"N\": 4}]], [[{\"bit\": \"p\", \"order\": 2, \"gfx\": 0, \"N\": 4}], [{\"type\": \"c\", \"gfx\": 0, \"N\": 4}]], [[{\"bit\": \"p\", \"order\": 1, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"p\", \"order\": 2, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"c\", \"gfx\": 0, \"N\": 4}]]], \"suit\": [0, 1, 1, 1], \"test\": [1.0, 1.0, 1.0, 1.0]}, \"pal\": [100.0, 100.0, 100.0, 100.0], \"alto\": [0.0, 0.0, 0.0, 0.0]}}"

')

哪种有效,但将值输入到 REDIS 格式不正确

谢谢你。

4

1 回答 1

1

这与 JSON 字符串的格式无关。您返回的错误表明您将错误的参数传递给函数。mset调用redis-py需要关键字参数或 Python 字典作为输入。Redis 中的MSET命令用于在单个操作中设置多个键的值,因此 Python API 期望这两种形式之一将 Redis 键映射到它们的值。如果您将代码更改为:

myDict = { 'SWSUIT': '"{\"D0:\": {\"install\": {\"rules\": [[0.62, -0.34], [-0.00, 4.95], [0.00, 0.00, 0.18]], \"name\": \"DO\", \"slows\": [[[{\"bit\": \"p\", \"order\": 1, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"c\", \"gfx\": 0, \"N\": 4}]], [[{\"bit\": \"p\", \"order\": 2, \"gfx\": 0, \"N\": 4}], [{\"type\": \"c\", \"gfx\": 0, \"N\": 4}]], [[{\"bit\": \"p\", \"order\": 1, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"p\", \"order\": 2, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"c\", \"gfx\": 0, \"N\": 4}]]], \"suit\": [0, 1, 1, 1], \"test\": [1.0, 1.0, 1.0, 1.0]}, \"pal\": [100.0, 100.0, 100.0, 100.0], \"alto\": [0.0, 0.0, 0.0, 0.0]}}"' }
r.mset(myDict)

你会得到你想要的结果。鉴于您只尝试设置单一数据类型,该set方法将是更好的选择。

于 2017-10-26T03:17:20.900 回答