2012-01-31 9 views
7

Być może przeoczyłem to, ale czy istnieje wbudowana metoda do serializowania/deserializacji tabel lua do plików tekstowych i na odwrót?metoda serializacji tabel lua

Posiadałem parę metod, aby to zrobić w tabeli lua o ustalonym formacie (np. 3 kolumny danych z 5 wierszami).

Czy można to zrobić w tabelach lua z dowolnym formatem arbitralny?

Na przykład, biorąc pod uwagę to tabela 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, 
      }, 
     } 
    }, 
} 

Byłoby przekształcony tekście tak:

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

Format tekstu odcinkach mogą być zdefiniowane w inny sposób, jak długo, jak tekst może być deserialized w pustym stole lua.

Odpowiedz

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

odniesienie here dla prostego json serializatora.

4

Lua sama nie ma takiego wbudowanego, ale implementacja nie jest trudna. Szereg wstępnie wypalonych implementacje są wymienione tutaj: http://lua-users.org/wiki/TableSerialization

+0

ouch, nic dziwnego, że stoły Lua wyglądają jak json, istniała już biblioteka dla Corony w [tutaj] (http://blog.anscamobile.com/2011/08/tutorial-exploring-json-usage-in-corona /). – cctan

7

Nie jestem pewien, dlaczego biblioteka JSON została oznaczona jako właściwa odpowiedź, ponieważ wydaje się być bardzo ograniczona w serializowaniu "tabel lua z dowolnym formatem". Nie obsługuje wartości boolean/table/function jako kluczy i nie obsługuje odwołań cyklicznych. Udostępnione odniesienia nie są serializowane jako udostępnione, a wartości math.huge nie są poprawnie serializowane w systemie Windows. Zdaję sobie sprawę, że większość z nich to ograniczenia JSON (i dlatego są one implementowane w ten sposób w bibliotece), ale zaproponowano to jako rozwiązanie dla ogólnej numeracji tabeli Lua (której nie jest).

Lepiej byłoby, używając jednej z wersji strony TableSerialization lub mojej Serpent serializer and pretty-printer.

+0

Zgadzam się z tobą, Lua nie jest JS. –