将 LUA 表/JSON 转换为 KEY=VAL 格式

我需要将一个 Lua 表转换成 KEY=VAL 的格式

例如:

   local t1 = {
        t0 = "valt0",
        t1 = "valt1",
        tN = {
            t0key = "t0var",
            t1key = "t1var",
        }
    }

转换后为

t0="valt0", t1="valt1", tN_t0key="t0var", tN_t1key="t1var"

有人有建议吗?

点赞
用户4554496
用户4554496

编写一个函数,循环遍历表,检查值是否为表格,如果是,则将该表格反馈到相同的函数中。 对于任何不是表格的内容,都将其写入到新的扁平化表格中。根据其出现的可能性,您可能需要通过跟踪已经迭代的表格来检查是否存在循环引用问题。

2016-09-27 08:46:39
用户6834680
用户6834680
local t1 = {
   t0 = "valt0",
   t1 = "valt1",
   t2 = 42,
   tN = {t0key = "t0var",
         t1key = "t1var"}
}

local function convert(t)
   local arr = {}
   local cyclic = {}

   local function convert_subtable(t, prefix)
      assert(not cyclic[t], 'Cannot convert: cyclic reference detected')
      cyclic[t] = true
      for k, v in pairs(t) do
         k = prefix..tostring(k)
         if type(v) == 'number' or type(v) == 'boolean' then
            table.insert(arr, k..'='..tostring(v))
         elseif type(v) == 'table' then
            convert_subtable(v, prefix..k..'_')
         else
            table.insert(arr, k..'='..string.format('%q', tostring(v)))
         end
      end
      cyclic[t] = nil
   end

   convert_subtable(t, '')
   table.sort(arr)
   return table.concat(arr, ', ')
end

print(convert(t1)) --> t0="valt0", t1="valt1", t2=42, tN_t0key="t0var", tN_t1key="t1var"
2016-09-27 09:07:34