lua - Lua中的cjson解码返回空数组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 表时...
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 是一个字符串/数字/布尔数组,您可以直接返回json_foo
,Redis 可以为您解析该数组。
但是,您的 JSON 是一个对象数组,这对于 Redis 来说太复杂而无法解析。你必须在你的 Lua 脚本中解析它。例如,您想返回 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
推荐阅读
- java - 更改 NumberPicker 的显示值
- python - 如何在 Python 中生成和编写所有 Unicode 字符?
- azure - Service Fabric 中节点类型的最大数量是多少?
- verilog - 在verilog中添加两个4位数字时出错
- string - 不能有条件地修改某些内容
- excel - 循环和复制/粘贴行 VBA
- python - MinMax 比例稀疏矩阵不包括零元素
- xamarin - RemoveDir 任务意外失败
- javascript - 在 JavaScript 中匹配 MySQL 的 utf8_general_ci 排序顺序
- c# - 如何将逗号分隔的字符串转换为整数列表?