Ваша таблица также может содержать строки со строкой "
, переводы строк, табуляции и т. Д. c. Я написал эту функцию для меня, которая позаботится об этом:
local function buildLiteral(value, tableAsVararg, buildedLiteralsCache)
if not buildedLiteralsCache then
buildedLiteralsCache = {}
end
local resultStr = nil
if value == nil then
resultStr = "nil"
else
if not buildedLiteralsCache[value] then
local t = type(value)
local str = nil
if t == "boolean" or t == "number" then
str = tostring(value)
elseif t == "string" then
str = "\"" .. string.gsub(string.gsub(string.gsub(string.gsub(string.gsub(value, "\\", "\\\\"), "\"", "\\\""), "\r", "\\r"), "\n", "\\n"), "\t", "\\t") .. "\""
elseif t == "table" then
if tableAsVararg then
str = ""
if table.getn(value) >= 1 then
for _, v in ipairs(value) do
str = str .. buildLiteral(v, false, buildedLiteralsCache) .. ", "
end
str = string.sub(str, 1, string.len(str) - 2)
end
else
str = "{"
for k, v in pairs(value) do
str = str .. "[" .. buildLiteral(k, false, buildedLiteralsCache) .. "]=" .. buildLiteral(v, false, buildedLiteralsCache) .. ", "
end
if string.len(str) > 1 then
str = string.sub(str, 1, string.len(str) - 2)
end
str = str .. "}"
end
else
error("buildLiteral called with unsupported type='" .. t .. "'")
end
buildedLiteralsCache[value] = str
end
resultStr = buildedLiteralsCache[value]
end
return resultStr
end
Затем вы можете снова загрузить таблицу, используя loadstring(str)()