我需要一个工具来解析Lua表表达式.如果所有其他方法都失败了,我最终只会编写一个小的Lua模块来将表转换为
XML,但目前我对
Ruby库感兴趣,但是如果不这样做,我会接受任何语言的工具,前提是我可以看看它的来源.
这是一个示例代码段(它是一个WoW插件输出):
CT_RaidTracker_RaidLog = {
{
["PlayerInfos"] = {
["Nyim"] = {
["race"] = "Orc",["guild"] = "Excubitores Noctae",["sex"] = 2,["class"] = "HUNTER",["level"] = 70,},["Zyrn"] = {
["race"] = "BloodElf",["class"] = "WARLOCK",...
基本思想是嵌套关联数组.任何帮助或指针都将被检查,任何想法都值得赞赏.
编辑#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”= {…}}等等(希望是最终的)解决方法可能会使它工作……将再次报告.
总结
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。