lua 对表的简单序列化与反序列化

参考文档:http://blog.csdn.net/xiaodan007/article/details/7096718

function sz_T2S(_t)
    local szRet = "{"
    function doT2S(_i, _v)
        if "number" == type(_i) then
            szRet = szRet .. "[" .. _i .. "] = "
            if "number" == type(_v) then
                szRet = szRet .. _v .. ","
            elseif "string" == type(_v) then
                szRet = szRet .. '"' .. _v .. '"' .. ","
            elseif "table" == type(_v) then
                szRet = szRet .. sz_T2S(_v) .. ","
            else
                szRet = szRet .. "nil,"
            end
        elseif "string" == type(_i) then
            szRet = szRet .. '["' .. _i .. '"] = '
            if "number" == type(_v) then
                szRet = szRet .. _v .. ","
            elseif "string" == type(_v) then
                szRet = szRet .. '"' .. _v .. '"' .. ","
            elseif "table" == type(_v) then
                szRet = szRet .. sz_T2S(_v) .. ","
            else
                szRet = szRet .. "nil,"
            end
        end
    end
    table.foreach(_t, doT2S)
    szRet = szRet .. "}"
    return szRet
end

function unsz_S2T(str)
    str = "return " .. str;
    local fun = loadstring(str);
    return fun();
end

local tt = {}
tt[1] = "aa";
tt.name = "halldd";
tt.tt = {};
tt.tt[3] = "bb";
print (tt[1]);

local ss = sz_T2S(tt);
local ttv = unsz_S2T(ss);
print (tt.name, tt.tt[3]);

 

posted @ 2014-05-08 18:14  莫压枯枯地  阅读(3318)  评论(0编辑  收藏  举报