Lua表/数组美化程序是否存在?

考虑到所有的json、xml格式化/美化程序,我一直没有找到一款适用于Lua表/数组的程序?

这里的细微差别在于,要美化的输出是我认为是一个广泛使用的表/数组“dump”函数——请参见下面的代码..

function dump(o)
    if type(o) == 'table' then
        local s = '{ '
        for k,v in pairs(o) do
            if type(k) ~= 'number' then
                k = '"'..k..'"'
            end
            s = s .. '['..k..'] = ' .. dump(v) .. ','
        end
        return s .. '} '
    else
        return tostring(o)
    end
end

我觉得应该是这样的。

转储的表格看起来像这样。

{[1] = ,[2] = { ["attr"] = { [1] = code,[2] = remaining,[3] = resetdate,["remaining"] = 990,["resetdate"] = 1638614242,["code"] = 200,} ,["tag"] = success,} ,[3] = ,["attr"] = { } ,["tag"] = prowl,}

我希望有一种美化程序可以像这样呈现。

{
[1] = ,
[2] = {
    ["attr"] = {
    [1] = code,
    [2] = remaining,
    [3] = resetdate,
    ["remaining"] = 990,
    ["resetdate"] = 1638614242,
    ["code"] = 200,
    } ,
    ["tag"] = success,
    } ,
[3] = ,
    ["attr"] = { } ,
    ["tag"] = prowl,
}

原文链接 https://stackoverflow.com/questions/71006567

点赞
stackoverflow用户7504558
stackoverflow用户7504558

下面是一个处理示例,您可以自己纠正一些小问题:

function dump(o,level)
    level = level or 1
    if type(o) == 'table' then
        local s = {}
        s[1] = '{ '
        for k,v in pairs(o) do
            if type(k) ~= 'number' then
                k = '"'..k..'"'
            end
            s[#s+1] = string.rep('\t',level).. '['..k..'] = ' .. dump(v, level+1) .. ','
        end
        s[#s+1] = string.rep('\t',level) .. '} '
        return table.concat(s , "\n")
    else
        return tostring(o or 'nil')
    end
end
local t = {[1] = nil,[2] = { ["attr"] = { [1] = code,[2] = remaining,[3] = resetdate,["remaining"] = 990,["resetdate"] = 1638614242,["code"] = 200,} ,["tag"] = success,} ,[3] = nil,["attr"] = { } ,["tag"] = prowl,}

print (dump(t))

结果:

{
    ["attr"] = {
        } ,
    [2] = {
        ["attr"] = {
            ["remaining"] = 990,
            ["code"] = 200,
            ["resetdate"] = 1638614242,
            } ,
        } ,
    }

您也应该注意,空初始化值(如 [3] =,)会抛出错误,并且通常零数据(如 [3] = resetdate )将在转储中被丢弃,因为赋值nil意味着删除表元素。

2022-02-06 12:02:53