2012-01-31 11 views
7

Puede haber pasado por alto esto, pero ¿existe un método incorporado para serializar/deserializar tablas lua en archivos de texto y viceversa?método para serializar tablas lua

Tenía un par de métodos para hacer esto en una tabla lua con formato fijo (por ejemplo, 3 columnas de datos con 5 filas).

¿Hay alguna manera de hacer esto en tablas lua con cualquier formato arbitrario ?

Para un ejemplo, dada esta tabla 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, 
      }, 
     } 
    }, 
} 

sería convertida en texto como este:

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

El formato del texto serializado se puede definir de cualquier manera, como siempre que la cadena de texto se pueda deserializar en una tabla lua vacía.

Respuesta

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

referencia here para un simple serializador JSON.

4

Lua solo no tiene ningún componente incorporado, pero implementar uno no es difícil. Un número de implementaciones precocidos se enumeran aquí: http://lua-users.org/wiki/TableSerialization

+0

ouch, no es de extrañar que las tablas lua parezcan json, ya existía una biblioteca para Corona en [aquí] (http://blog.anscamobile.com/2011/08/tutorial-exploring-json-usage-in-corona /). – cctan

7

No estoy seguro de por qué la biblioteca JSON fue marcada como la respuesta correcta, ya que parece ser muy limitada en la serialización de "tablas lua con cualquier formato arbitrario". No maneja valores booleanos/de tabla/función como claves y no maneja referencias circulares. Las referencias compartidas no se serializan como compartidas y los valores math.huge no se serializan correctamente en Windows. Me doy cuenta de que la mayoría de estos son limitaciones de JSON (y por lo tanto implementadas de esta manera en la biblioteca), pero esto fue propuesto como una solución para la serialización genérica de tablas de Lua (que no lo es).

Sería mejor utilizar una de las implementaciones de la página TableSerialization o mi Serpent serializer and pretty-printer.

+0

Estoy de acuerdo contigo, Lua no es JS. –