lua中的序列化

引用:http://blog.codingnow.com/cloud/LuaSerializeTable/

--打包数据table, 
--1.支持table 嵌套和循环引用 2. 支持 number, string, boolean
function TableToString(t)  
	local mark={}  
	local assign={}  
	local function ser_table(tbl,parent)  
		mark[tbl]=parent  
		local tmp={}  
		for k,v in pairs(tbl) do  
			local key= type(k)=="number" and "["..k.."]" or "[".. string.format("%q", k) .."]" 
			if type(v)=="table" then  
				local dotkey= parent.. key  
					if mark[v] then  
						table.insert(assign,dotkey.."='"..mark[v] .."'")  
					else  
						table.insert(tmp, key.."="..ser_table(v,dotkey))  
					end  
			elseif type(v) == "string" then  
				table.insert(tmp, key.."=".. string.format('%q', v))  
			elseif type(v) == "number" or type(v) == "boolean" then  
				table.insert(tmp, key.."=".. tostring(v))  
			end  
		end  
		return "{"..table.concat(tmp,",").."}"  
	end  
	return "do local ret="..ser_table(t,"ret")..table.concat(assign," ").." return ret end"  
end  


function StringToTable(strData)
	local f = loadstring(strData)  
	if f then  
		return f() 
	end  
end

--[[
--test0:
t = {}
g = {1,2,3,t}
t.rt = g
local str = TableToString(t)
print(str)
local f = StringToTable(str)
print(f.rt[2])
]]

--[[
--test1:
t = {1,2,3,"sdf", a = "df", d = true, qe = 3, {7}, qq = {{2,3,a={}}}, } 
print(t[4]) 
g = { c = 3, d = 4,  t}
t.rt = g
t.f = {1,2,3}  
t.m = {3,4,5} 
local res = TableToString(t)
local f = StringToTable(res)
print(f.rt.d) 	--4

print(f.f[1]) 	--1
print(f[1])		--1
print(f[2])		--2
print(f[3])		--3
print(f[4])		--"sdf"
print(f.a)		--"df"
print(f.d)		--true
print(f.qe) 	--3
print(f[5][1])  --7
print(f.qq[1][1])	--2
print(f.qq[1][2])	--3
print(f.qq[1].a)   --table:
--]]


----[[
--test3:


--]]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值