Tôi đang phát triển chức năng JSON được tối ưu hóa đơn giản. Lua sử dụng các bảng để biểu diễn mảng nhưng trong JSON tôi cần phải nhận ra giữa chúng. Đoạn code dưới đây được sử dụng:Làm cách nào để biết bảng có phải là mảng không?
t={
a="hi",
b=100
}
function table2json(t,formatted)
if type(t)~="table" then return nil,"Parameter is not a table. It is: "..type(t) end
local ret=""--return value
local lvl=0 --indentation level
local INDENT=" " --OPTION: the characters put in front of every line for indentation
function addToRet(str) if formatted then ret=ret..string.rep(INDENT,lvl)..str.."\n" else ret=ret..str end end
addToRet("{")
lvl=1
for k,v in pairs(t) do
local typeof=type(v)
if typeof=="string" then
addToRet(k..":\""..v.."\"")
elseif typeof=="number" then
addToRet(k..":"..v)
end
end
lvl=0
addToRet("}")
return ret
end
print(table2json(t,true))
Như bạn có thể thấy trong JSON tham khảo một object
là những gì được gọi là một table
trong Lua và nó khác với một array
.
Câu hỏi đặt ra là làm thế nào tôi có thể phát hiện nếu một bảng đang được sử dụng như một mảng?
- Một giải pháp tất nhiên là trải qua tất cả các cặp và xem liệu chúng có các phím số liên tiếp hay không nhưng không đủ nhanh.
- Một giải pháp khác là đặt cờ trong bảng cho biết đó là một mảng không phải là đối tượng.
Bất kỳ giải pháp đơn giản/thông minh hơn nào?
Xem: http://stackoverflow.com/questions/6077006/how-can-i-check-if-a-lua-table-contains-only-sequential-numeric-indices/6080274#6080274 – BMitch