刚刚写游戏存档的时候遇到了这个问题,于是记录一下,希望对一些lua入门者有有帮助
lua里面,获取数组长度有两种方法
lua = {1,2,3}
#lua
table.maxn(lua)
#是取长度符号,一般情况下取到的长度和maxn返回值相同, 但是如果数组非连续,比如存在两个nil,Lua会认为数组在nil这里结束,返回一个非准确长度。
但很多数组里都会是非连续的,json为了防止这种情况造成的数据丢失,在遇到非连续数组时,会把非末尾的nil转换成userdata:NULL进行存储
这样就起到了防止数据丢失的效果。
比如,
lua = {nil,nil,1,1,nil,nil,nil,nil}
test = json.decode(lua)
test = json.encode(test)
table.print(test)
结果不会是原来数组,将是{userdata:NULL,userdata:NULL,1,1}
最后一个实体元素前面的空值变为userdata:NULL,后面的nil自动省略。