删除luajson输出中的新行和制表符

时间:2014-07-08 15:02:28

标签: json lua

我正在尝试将已保存的Lua表转换为可以更轻松地解析为包含在网页中的内容。我正在使用Lua来自code.google's luaforwindows的窗口。它已包含此harningt's luajson用于处理此转换。我已经能够弄清楚如何加载文件的内容。我没有错误,但它产生的“json”无效。它只是将整个内容括在引号中,并添加\n\t。我正在阅读的文件是.lua文件,其格式如下:

MyBorrowedData = {
    ["first"] = {
        ["firstSub"] = {
            ["firstSubSub"] = {
                {
                    ["stuffHere"]="someVal"
                },
                {
                    ["stuffHere2"]="some2Val"
                },
            },
        },
    },
}

请注意表中每个“行”中最后一项之后的,是问题吗?这是有效的Lua数据吗?我觉得给出了输出,当我读到它时,Lua无法解析表。我相信当我尝试{l}数据文件require时,这更多,我似乎无法遍历手动表。

有人能告诉我这是代码中的错误还是导致问题的格式错误的数据?

Lua解除很容易:

local json = require("json")
local file = "myBorrowedData.lua"
local jsonOutput = "myBorrowedOutput.json"

r = io.input(file)
t = io.read('*all')
u = io.output(jsonOutput)
s = json.encode(t)
io.write(s)

1 个答案:

答案 0 :(得分:3)

您正在以纯文本形式阅读文件,而不是加载其中包含的Lua代码。 t成为包含Lua文件内容的字符串,当然序列化为普通的JSON字符串。

要序列化Lua文件中的数据,您需要运行它。

local func = loadstring(lua_code_string) -- Load Lua code from string
local data = {} -- Create table to store data
setfenv(func, data) -- Set the loaded function's environment, so any global writes that func does will go to the data table instead.
func() -- Run the loaded function.

local serialized_out = json.encode(data)

此外,使用逗号(或分号)结束表的最后一项是完全有效的语法。事实上,我推荐它;在向表中添加新项时,您不必担心向前一个对象添加逗号。