2012-01-31 88 views
7

我可能錯過了這個,但有沒有一個內置的方法來序列化/反序列化lua表到文本文件,反之亦然?用於序列化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表。

回答

2
require "json" 
local t = json.decode(jsonFile("sample.json")) 

參考here

4

Lua本身沒有任何這樣的內建,但實施一個並不困難。許多預烘焙實現這裏列出:一個簡單的JSON序列http://lua-users.org/wiki/TableSerialization

+0

哎呀,難怪lua桌子看起來像json,在[這裏]已經有一個Corona圖書館了(http://blog.anscamobile.com/2011/08/tutorial-exploring-json-usage-in-corona /)。 – cctan 2012-01-31 05:41:47

7

我不知道爲什麼JSON庫被標記爲正確的答案,因爲它似乎是非常有限的序列化「任何任意格式的盧阿表」。它不處理布爾值/表/函數值作爲鍵,並且不處理循環引用。共享引用不會被序列化爲共享,並且math.huge值在Windows上未正確序列化。我意識到這些大部分都是JSON限制(因此在庫中以這種方式實現),但是這被提出爲通用Lua表序列化(它不是)的解決方案。

通過使用TableSerialization頁面或我的Serpent serializer and pretty-printer中的一個實現,可能會更好。

+0

我同意你的看法,Lua不是JS。 – 2014-02-11 10:35:58