table序列化成json格式文件
在游戏开中我们经常会有将数据转换为一个字节流或者字符流的需求,然后将其存储到一个文件或者通过网络连接发送出去,
在lua中对于保存在table中的数据我们可以简单序列化成json文件保存到本地
--无环table序列化为json格式保存到文件
local file = io.open("1.json", "w")
if(file == nil) then
print("open file 1.txt fail")
end
function getTableLen(tab)
local len = 0
for k, v in pairs(tab) do
len = len + 1
end
return len
end
function serialize(pTable, indent)
indent = indent or 0
local spaceStr = string.rep(" ", indent)
if(type(pTable) == "number") then
file:write(pTable)
elseif(type(pTable) == "string") then
file:write(string.format("%q", pTable))
elseif(type(pTable) == "table") then
indent = indent + 1
spaceStr = string.rep(" ", indent)
file:write("{\n")
local length = getTableLen(pTable)
local index = 0
for k, v in pairs(pTable) do
index = index + 1
file:write(string.format("%s", spaceStr));
serialize(k, indent)
file:write(" : ");
serialize(v, indent)
if(index < length) then
file:write(",\n")
else
file:write("\n")
end
end
local space = string.rep(" ", indent - 1)
file:write(string.format("%s}", space))
else
error("cannot serialize a " .. type(pTable))
end
end
local temp = {
a = 1,
b = 'helloworld "one"',
c = {
dic = {key = 12, value = "class"},
name = "zxh",
sec = {
m = "sikd",
n = 90,
}
}
}
serialize(temp)
file:close()
生成的json文件内容如下: