我需要一个分析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" = {... } }
等。这种(希望是最终的)解决方法可能会使它起作用……将再次报告。;)
跳过第一行,然后临时转换为JSON。
s=File.readlines("test.luatable")[1..-1].join
JSON.parse(s.gsub("=", ":").gsub(/[\[\]]/,"").gsub('" :','":').gsub(/,\n(.+)\}/,"\n\\1}"))
=> {"PlayerInfos"=>{"Nyim"=>{"guild"=>"Excubitores Noctae", "class"=>"HUNTER",
"level"=>70, "sex"=>2, "race"=>"Orc"}, "Zyrn"=>{"guild"=>"Excubitores Noctae",
"class"=>"WARLOCK", "level"=>70, "sex"=>2, "race"=>"BloodElf"}}}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句