序列化lua表的方法

问题描述 投票:0回答:6

我可能错过了这一点,但是是否有一个内置方法可以将 lua 表序列化/反序列化为文本文件,反之亦然?

我有两种方法可以在固定格式的 lua 表上执行此操作(例如 3 列数据,5 行)。

有没有办法在任何“任意”格式的 lua 表上执行此操作? 举个例子,给定这个 lua 表:

local scenes={ {name="scnSplash", obj={ { name="bg", type="background", path="scnSplash_bg.png", }, { name="bird", type="image", path="scnSplash_bird.png", x=0, y=682, }, } }, }

它会被转换成这样的文本:

{name="scnSplash",obj={{name="bg",type="background",path="scnSplash_bg.png",},{name="bird", type="image",path="scnSplash_bird.png",x=0,y=682,}},}

序列化文本的格式可以用任何方式定义,只要文本字符串可以反序列化成空的lua表即可。

serialization lua coronasdk lua-table
6个回答
13
投票
math.huge

值在 Windows 上未正确序列化。我意识到其中大部分都是 JSON 限制(因此在库中以这种方式实现),但这是作为通用 Lua 表序列化的解决方案提出的(事实并非如此)。


使用

TableSerialization

页面或我的 Serpent 序列化器和漂亮打印机中的实现之一会更好。


5
投票
http://lua-users.org/wiki/TableSerialization


1
投票
参考 
here

获取简单的 json 序列化器。


0
投票
rxi/json.lua

中的 json.lua 添加到您的项目中,然后将其用于: local json = require("json") local encoded = json.encode({ name = "J. Doe", age = 42 }) local decoded = json.decode(encoded) print(decoded.name)

请注意,如果您尝试序列化的值中存在函数,则代码会阻塞。您必须修复代码中的第 82 行和第 93 行以跳过具有函数类型的值。


0
投票

local nl = string.char(10) -- newline function serialize_list (tabl, indent) indent = indent and (indent.." ") or "" local str = '' str = str .. indent.."{"..nl for key, value in pairs (tabl) do local pr = (type(key)=="string") and ('["'..key..'"]=') or "" if type (value) == "table" then str = str..pr..serialize_list (value, indent) elseif type (value) == "string" then str = str..indent..pr..'"'..tostring(value)..'",'..nl else str = str..indent..pr..tostring(value)..','..nl end end str = str .. indent.."},"..nl return str end local str = serialize_list(tables) print(str)



0
投票
	
© www.soinside.com 2019 - 2024. All rights reserved.