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的吗?

解决方法

我找到了问题所在。看起来节点未在序列化已解码的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中查找字符串。