【问题标题】:Redis Lua decoding Json returning empty tableRedis Lua解码Json返回空表
【发布时间】:2021-01-14 11:06:29
【问题描述】:

我正在尝试从 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 的东西。

【问题讨论】:

  • 确保引号是正确的(双引号;以及在键周围)并且 JSON 在缓存中有效。
  • 从 redis.call 中检索 value 工作正常。我正在节点中获取 json 值 {"one":1,"two":"2","three":{"four":4}}。它以 json 对象的形式出现。问题是我需要在redis环境中执行一些昂贵的操作,而redis中value变量的类型是字符串。我认为当值返回时它会被 redis api 序列化,但是 cjson 不起作用的事实让我不这么认为。

标签: lua lua-table


【解决方案1】:

我找到了问题所在。它看起来不像 node 正在序列化一个解码的 lua json 对象,它只返回一个空数组[]。它虽然在lua中解码。以下代码在node中返回一个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中寻找一个字符串。

【讨论】:

    猜你喜欢
    • 2019-01-13
    • 2018-08-05
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多