Lua稀疏数组

在传输json数据的时候难免会传输一些稀疏数组,但有时会有问题,看下面的例子:

local json = require("cjson")

local data = {1, 2}
data[1000] = 99

-- ... do the other things
ngx.say(json.encode(data))

如果运行,会导致encode的一个异常,返回500错误。问题的点在于cjson 想保护你的内存资源,担心这个下标太大,浪费内存。如果把1000换成5,也是不会有问题的。

想要彻底解决这个问题,就需要调用cjson的一个接口:

local json = require("cjson")

local data = {1, 2}
data[1000] = 99

-- ... do the other things
json.encode_sparse_array(true)
ngx.say(json.encode(data))

打开编码稀疏数组这个选项后,整个数组会使用另一种方式来编码{"1":1,"2":2,"1000":99},而不会傻乎乎的浪费空间。