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

我正在尝试将保存的 Lua 表格转换为更容易解析的形式,以便在网页上使用。我正在使用来自 code.google 的 luaforwindows 的 Lua。它包含了 harningt 的 luajson 以处理此转换。我已经能够弄清如何加载文件内容。我没有收到任何错误,但它生成的“json”是无效的。它只是用引号括起整个内容,并添加了 \n\t。我正在读取的文件是一个 .lua 文件,它遵循以下格式:

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

注意在表格的每个“行”结束后跟随 ,,这是问题吗?这是有效的 Lua 数据吗?我觉得鉴于输出,Lua 无法在我读取它时解析表格。我甚至相信当我尝试只是 require lua 数据文件时,我似乎无法手动遍历表格。

有人能告诉我是代码中的 bug 还是格式不良的数据导致的问题吗?

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)
点赞
用户646619
用户646619

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

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

local func = loadstring(lua_code_string) -- 从字符串中加载 Lua 代码
local data = {} -- 创建表来存储数据
setfenv(func, data) -- 设置加载的函数的环境,因此任何 func 所做的全局写入都将进入数据表。
func() -- 运行已加载的函数。

local serialized_out = json.encode(data)

此外,在表的最后一个项结束时用逗号(或分号)是完全有效的语法。实际上,我建议这样做;您无需担心在添加新项时向先前的最后一个对象添加逗号。

2014-07-08 15:44:57