将lua数据表格 转换成json格式,xml格式

本文介绍如何将Lua中的数据表格转换为JSON和XML格式,提供了直接的代码示例进行详细说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先转换成json,不废话直接代码:


    local temp = require(tableName)
    local function table2json(t)
        --将表格转换为json
        local function serialize(tbl)
            local tmp = {}
            for k, v in pairs(tbl) do
                local k_type = type(k)
                local v_type = type(v)
                local key = (k_type == "string" and "\"" .. k .. "\":") or (k_type == "number" and "")
                local value = (v_type == "table" and serialize(v)) or (v_type == "boolean" and tostring(v)) or (v_type == "string" and "\"" .. v .. "\"") or (v_type == "number" and v)
                tmp[#tmp + 1] = key and value and tostring(key) .. tostring(value) or nil
            end
            if table.maxn(tbl) == 0 then
                return "{" .. table.concat(tmp, ",") .. "}"
            else
                return "[" .. table.concat(tmp, ",") .. "]"
            end
        end
        assert(type(t) == "table")
        return serialize(t)
    end
    local function appendFile(fileName, content)
        local f = assert(io.open(fileName, 'w'))
        f:write(content)
        f:close()
    end
    appendFile('itemtable.json', table2json(temp))--temp就是要转换的数据




 

接下来是转换成xml:

--this is luatoxml
local M = {}
local indentation = ""

function M.ToXmlString(value)
    value = string.gsub(value, "&", "&"); -- '&' -> "&"
    value = string.gsub(value, "<", "&lt;"); -- '<' -> "&lt;"
    value = string.gsub(value, ">", "&gt;"); -- '>' -> "&gt;"
    value = string.gsub(value, "\"", "&quot;"); -- '"' -> "&quot;"
    return value;
end

function M.toxml(value)
    local xml = ""
    local t = type(value)

    if t == "string" then
        xml = xml .. indentation .. "<" .. value .. "/>\n"
    elseif t == "table" then
        for name, data in pairs(value) do
            if type(name) == "number" and type(data) == "table" then
                xml = xml .. "<entry>"
                xml = xml .. M.toxml(data)
                xml = xml .. "</entry>"
            elseif type(data) == "table" then
                local arr = true
                for kk, vv in pairs(data) do
                    if type(kk) ~= "number" then
                        arr = false
                        break
                    end
                end
                local sssss = ""
                if arr then
                    for g = 1, #data do
                        if type(data[g]) == "table" then
                            for gg = 1, #data[g] do
                                sssss = sssss .. data[g][gg] .. ","
                            end
                        else
                            sssss = sssss .. data[g] .. ","
                        end
                    end
                else
                    for kk, vv in pairs(data) do
                        sssss = sssss .. vv .. ","
                    end
                end
                xml = xml .. indentation .. "<" .. name .. ">"
                xml = xml .. sssss
                xml = xml .. indentation .. "</" .. name .. ">\n"
            else
                xml = xml .. indentation .. "<" .. name
                if type(data) == "table" then
                    local children = {}
                    local number_strings = {}
                    for k, v in pairs(data) do
                        local vtype = type(v)
                        local ktype = type(k)
                        if vtype == "table" then
                            children[k] = v
                        elseif ktype == "string" then
                            xml = xml .. " " .. k .. '="' .. tostring(v) .. '"'
                        elseif ktype == "number" and vtype == "string" then
                            table.insert(number_strings, v)
                        end
                    end

                    if next(children) ~= nil or #number_strings > 1 then
                        xml = xml .. ">\n"
                        indentation = indentation .. "\t"
                        xml = xml .. M.toxml(children)
                        xml = xml .. M.toxml(number_strings)
                        indentation = indentation:sub(1, #indentation - 1)
                        xml = xml .. indentation .. "</" .. name .. ">\n"
                    else
                        if #number_strings == 1 then
                            xml = xml .. ">" .. number_strings[1] .. "</" .. name .. ">\n"
                        else
                            xml = xml .. "/>\n"
                        end
                    end
                elseif string.find(tostring(data), "<") ~= nil then
                    xml = xml .. ">" .. M:ToXmlString(data) .. "</" .. name .. ">\n"
                else
                    xml = xml .. ">" .. tostring(data) .. "</" .. name .. ">\n"
                end
            end
        end
    end
    return xml
end

return M
local luatoxml = require "luatoxml"
    local tableName = "表名"
    local temp = require(tableName)
    f = assert(io.open("luaToxml/" .. tableName .. '.xml', 'w'))--转换后的xml名字,存放路径
    f:write('<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>')
    f:write('<LocalDatas xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">')
    f:write(luatoxml.toxml(temp))
    f:write("</LocalDatas>")
    f:close()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值