lua里table转string(序列化)和string转table(反序列化)
来源:互联网 发布:装饰工程报价软件 编辑:程序博客网 时间:2024/05/29 17:20
网上找到的代码,非常完美,出处已经不可查,见谅
function serialize(obj) local lua = "" local t = type(obj) if t == "number" then lua = lua .. obj elseif t == "boolean" then lua = lua .. tostring(obj) elseif t == "string" then lua = lua .. string.format("%q", obj) elseif t == "table" then lua = lua .. "{\n" for k, v in pairs(obj) do lua = lua .. "[" .. serialize(k) .. "]=" .. serialize(v) .. ",\n" end local metatable = getmetatable(obj) if metatable ~= nil and type(metatable.__index) == "table" then for k, v in pairs(metatable.__index) do lua = lua .. "[" .. serialize(k) .. "]=" .. serialize(v) .. ",\n" end end lua = lua .. "}" elseif t == "nil" then return nil else error("can not serialize a " .. t .. " type.") end return luaendfunction unserialize(lua) local t = type(lua) if t == "nil" or lua == "" then return nil elseif t == "number" or t == "string" or t == "boolean" then lua = tostring(lua) else error("can not unserialize a " .. t .. " type.") end lua = "return " .. lua local func = loadstring(lua) if func == nil then return nil end return func()enddata = {["a"] = "a", ["b"] = "b", [1] = 1, [2] = 2, ["t"] = {1, 2, 3}} local sz = serialize(data) print(sz) print("---------") print(serialize(unserialize(sz)))
function serialize(obj) local lua = "" local t = type(obj) if t == "number" then lua = lua .. obj elseif t == "boolean" then lua = lua .. tostring(obj) elseif t == "string" then lua = lua .. string.format("%q", obj) elseif t == "table" then lua = lua .. "{\n" for k, v in pairs(obj) do lua = lua .. "[" .. serialize(k) .. "]=" .. serialize(v) .. ",\n" end local metatable = getmetatable(obj) if metatable ~= nil and type(metatable.__index) == "table" then for k, v in pairs(metatable.__index) do lua = lua .. "[" .. serialize(k) .. "]=" .. serialize(v) .. ",\n" end end lua = lua .. "}" elseif t == "nil" then return nil else error("can not serialize a " .. t .. " type.") end return luaendfunction unserialize(lua) local t = type(lua) if t == "nil" or lua == "" then return nil elseif t == "number" or t == "string" or t == "boolean" then lua = tostring(lua) else error("can not unserialize a " .. t .. " type.") end lua = "return " .. lua local func = loadstring(lua) if func == nil then return nil end return func()enddata = {["a"] = "a", ["b"] = "b", [1] = 1, [2] = 2, ["t"] = {1, 2, 3}} local sz = serialize(data) print(sz) print("---------") print(serialize(unserialize(sz)
0 0
- lua里table转string(序列化)和string转table(反序列化)
- lua里实现table的序列化和反序列化
- Lua里实现将table转成字符串(序列化)和将字符串转换回table(反序列化)
- Lua里实现将table转成字符串(序列化)和将字符串转换回table(反序列化)
- Lua里实现将table转成字符串(序列化)和将字符串转换回table(反序列化)
- Lua里实现将table转成字符串(序列化)和将字符串转换回table(反序列化)
- Lua里实现将table转成字符串(序列化)和将字符串转换回table(反序列化)
- lua Table的序列化与反序列化函数
- Lua table转string函数
- lua table to string
- lua table to string,string to table
- Lua里实现将Table转为String输出,Debug神器
- java 序列化为String无法反序列化
- 记录lua的table转string一个问题
- lua转换string到Table
- protobuf Message的序列化和反序列化string类型
- C#序列化及反序列化:类实例和string类型之间转换
- protobuf Message的序列化和反序列化string类型
- Linux进程、线程模型,LWP,pthread
- Qt Creator窗口布局
- java的instanceof()方法
- quick-lua中脚本和资源的加密
- find查找所以文件字符串命令
- lua里table转string(序列化)和string转table(反序列化)
- hdu 1695
- webBrowser1_DocumentCompleted执行两次
- 重写www.zju.edu.cn后的总结
- 前端编码规范之CSS
- Linux下修改MySql最大连接数-亲自试验
- JAVA-2015-04-24应该思考的东西
- leetCode : Length of Last Word
- 饼图柱状图插件 highcharts