способ сериализации таблиц 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.

3 ответов


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

было бы лучше использовать одну из реализаций из TableSerialization страница или мой Серпент сериализатор и довольно-принтер.


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


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

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