cjson不连续存储问题

local t = {}
t[1] = {100,200,300}
t[5] = {200,300,400}

local temp = cjson.encode(t)
print(temp)
t = cjson.decode(temp)
print(t [2])

打印如下:
[15-11-05 20:10:05 DEBUG] [[100,200,300],null,null,null,[200,300,400]]
[15-11-05 20:10:05 DEBUG] userdata: 00000000

因为key不连续导致cjson编码的时候存的是个null,然后解析出来就是个userdata,如果有写类似的代码:
if t[2][1] == nil then
t[2][1] = 10 //进入不了这里,因为索引一个null的userdata数据,找不到
end

为了避免这种问题,key不连续的时候,把num转化成string就可以了
如:
t[tostring(1)] = {100,200,300}
t[tostring(5)] = {200,300,400}
此时的打印如下:
[15-11-05 20:18:33 DEBUG] {“1”:[100,200,300],”5”:[200,300,400]}
[15-11-05 20:18:33 DEBUG] nil
编码的时候就不会存null,然后这样的判定if t[2][1] == nil then就能够生效了。

如果代码已经在线上了,为了兼容,编码的时候不tostring一下的话,那就要在解码使用的时候做下判定:
if type(t[2]) == “userdata” then
t[2] = {}
t[2][1] = 10
end

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章