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

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