我正在尝试将已保存的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)
答案 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)
此外,使用逗号(或分号)结束表的最后一项是完全有效的语法。事实上,我推荐它;在向表中添加新项时,您不必担心向前一个对象添加逗号。