cjson 在 Lua returns 空数组 redis-cli 数组中解码

cjson decode in Lua returns array of empty arrays redis-cli

我有一个很大的 JSON 对象数组作为编码字符串存储在 redis 中。

local string_foo = redis.call("get", "foo")

"[{\"id\":\"xxxxxxxx\",\"block-scope\":[],\"history\":[{\"type\":\"answer\",\"timestamp\":1516295540951,\"message\":{\"mid\":\"mid.$cAACRSqSkpgVnO4cWglhCkHOU0XJQ\",\"seq\":24216,\"text\":\"fdjl\"}},{\"messageType\":\"text\",\"type\":\"messa ..."

我想使用 lua 脚本遍历此数组,以将此数据迁移为更易于管理的形式。但是,当我尝试使用 cjson 解码创建 lua table 时...

local json_foo = cjson.decode(string_foo)

[[],[],[],[],[]...]

我得到一个空数组或集合的列表(redis-cli ldb 不确定是哪个)

1) (empty list or set)
2) (empty list or set)
3) (empty list or set)
4) (empty list or set)
5) (empty list or set)
....

为什么会这样?它很大,但不是特别大。(~6 MB) 该字符串使用 JSON.stringify.

编码

如果你的JSON是string/number/bool的数组,你可以直接returnjson_foo,Redis会帮你解析数组

但是,你的JSON是对象数组,Redis解析起来太复杂了。您必须在 Lua 脚本中解析它。例如,您想要 return 您的 JSON 数组的所有 ID:

local json_foo = cjson.decode(string_foo)
local ids = {}
for idx, ele in pairs(json_foo) do ids[idx] = ele["id"] end
return ids