table序列化成json格式文件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaixh_89/article/details/84953797

在游戏开中我们经常会有将数据转换为一个字节流或者字符流的需求,然后将其存储到一个文件或者通过网络连接发送出去,
在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文件内容如下:

猜你喜欢

转载自blog.csdn.net/zhaixh_89/article/details/84953797