Redis Lua解码Json返回空表

我正在尝试从nodejs在我的Redis实例中运行一个lua脚本。我在我的缓存中设置了一个json对象{one:1, two:'2', three: {four: 4}},然后在lua中运行以下脚本:

local value = redis.call('get', 'myKey')
local obj = cjson.decode(value)
return obj

返回到节点的结果是[]

我试图使用代码 return type(obj) 返回类型,它以表格形式返回。调用 return type(value) 给我一个 string 字符串。为什么cjson没有解码实际对象?我是否可以使用其他方法将我的字符串解码为json。

点赞
用户6569899
用户6569899

我找到了问题所在。看起来 node 没有对解码后的 lua json 对象进行序列化,它只返回了一个空数组 []。不过 lua 已经成功解码了。下面的代码将返回一个 json 对象:

local value = redis.call("get", "myKey")
local obj = cjson.decode(value)
return cjson.encode(obj)

此外,下面的代码将返回 1

local value = redis.call("get", "myKey")
local obj = cjson.decode(value)
return obj.one

因此,json 对象已经被创建了,我认为 redis 包中的 json 序列化器正在寻找来自 lua 的字符串。

2020-09-29 14:46:47