способ сериализации таблиц lua - PullRequest
7 голосов
/ 31 января 2012

Возможно, я пропустил это, но есть ли встроенный метод для сериализации / десериализации таблиц 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.

Ответы [ 3 ]

8 голосов
/ 13 июня 2012

Я не уверен, почему библиотека JSON была помечена как правильный ответ, поскольку кажется, что она очень ограничена в сериализации "таблиц lua с любым произвольным форматом". Он не обрабатывает логические значения / значения таблиц / функций как ключи и не обрабатывает циклические ссылки. Общие ссылки не сериализуются как общие, а значения math.huge неправильно сериализуются в Windows. Я понимаю, что большинство из них являются ограничениями JSON (и, следовательно, реализованы таким образом в библиотеке), но это было предложено в качестве решения для универсальной сериализации таблиц Lua (а это не так).

Лучше было бы воспользоваться одной из реализаций со страницы TableSerialization или моего Serpent serializer и pretty-printer .

4 голосов
/ 31 января 2012

У одного Lua такого встроенного средства нет, но реализовать его не сложно.Здесь перечислены несколько предварительно запеченных реализаций: http://lua -users.org / wiki / TableSerialization

2 голосов
/ 31 января 2012
require "json"
local t = json.decode( jsonFile( "sample.json" ) )

ссылка здесь для простого сериализатора json.

...