在我的Lua项目中,我收到一个数组,将其编码为JSON并进一步传递。我的Lua编码函数如下所示:
local function encode_table(val, stack)
local res = {}
stack = stack or {}
-- Circular reference?
if stack[val] then error("circular reference") end
stack[val] = true
if val[1] ~= nil or next(val) == nil then
-- Treat as array -- check keys are valid and it is not sparse
local n = 0
for k in pairs(val) do
if type(k) ~= "number" then
error("invalid table: mixed or invalid key types")
end
n = n + 1
end
-- need to add a stub somewhere here above the next line
if n ~= #val then
error("invalid table: sparse array") -- THIS TRIGGERS and stops the code
end
-- Encode
for i, v in ipairs(val) do
table.insert(res, encode(v, stack))
end
stack[val] = nil
return "[" .. table.concat(res, ",") .. "]"
else
-- Treat as an object
for k, v in pairs(val) do
if type(k) ~= "string" then
error("invalid table: mixed or invalid key types")
end
table.insert(res, encode(k, stack) .. ":" .. encode(v, stack))
end
stack[val] = nil
return "{" .. table.concat(res, ",") .. "}"
end
end
问题是我重新获得一个缺少1个元素的数组。我需要以键-值的方式为其添加存根,例如
myArray['missingKey'] = 'somestubvalue'
但是我不知道该怎么做。另外在稀疏数组的代码中有一个检查,该检查会引发错误,因此我需要在完成检查之前添加一个存根(请参见代码)。任何想法如何做到这一点将受到欢迎。谢谢。