我需要一个工具来解析 Lua 表表达式。如果一切都失败了,我最终只会编写一个小的 Lua 模块来将表转换为 XML,但目前,我对 Ruby 库感兴趣,但如果失败了,我会接受任何语言的工具,只要我可以看看它的来源。
这是一个示例片段(它是一个 WoW 插件输出):
CT_RaidTracker_RaidLog = {
{
["PlayerInfos"] = {
["Nyim"] = {
["race"] = "Orc",
["guild"] = "Excubitores Noctae",
["sex"] = 2,
["class"] = "HUNTER",
["level"] = 70,
},
["Zyrn"] = {
["race"] = "BloodElf",
["guild"] = "Excubitores Noctae",
["sex"] = 2,
["class"] = "WARLOCK",
["level"] = 70,
},
...
基本思想是嵌套关联数组。将检查任何帮助或指针,感谢任何想法。
EDIT #1
由于存在争议,让我澄清一下我尝试了什么。我补充了其中一位参与者提供的字符串/正则表达式替换链,如下所示:
str.gsub(/--.+$/, "").gsub("=", ":").gsub(/[\[\]]/,"").gsub('" :','":').gsub(/,\s*\n(\s*)}/, "\n\\1}")
我 (1) 添加了 Lua 注释的删除,(2) 替换了其中一个正则表达式替换器:当您在对象/数组中有最后一个元素时,它后面仍然有一个逗号,因此必须将其覆盖并正确删除逗号.
你注意到双开口花括号了吗?JSON 不喜欢匿名对象。它看起来像这样:
"xxx" = {
{
["aaa"} = {
["bbb"] = {
"ccc" = 7
"ddd" = "a string"
"eee" = "a date/time pattern"
}
},
["qqq"} = {
"hm" = "something"
}
},
{
["aaa"] = {
-- ...
},
["qqq"] = {
-- ...
}
}
}
基本上在根级别,我们实际上有一个类似对象的列表/数组,都有“aaa”和“qqq”部分,以遵循示例。但是,在 Lua 中显然是允许的,而在 JSON 中则不允许。因为打开的花括号被视为“开始一个对象”,但该对象没有名称。
我试图用正则表达式检测这种情况,并用“[]”对替换花括号。虽然生成的正则表达式有效,但问题是一样的:好的,我们定义了一个相似对象的数组,但数组的声明仍然是无名的。
一个可能的解决方案不是用 [] 检测和替换这些大括号,而是用索引命名对象,例如:"0" = { "aaa" = {...} }, "1" = { "aaa" = {... } }
等。(希望是最终的)解决方法可能会使其工作......将再次报告。;)