我需要一个工具来解析Lua表,最好是在Ruby或Java中

dimitarvp:

我需要一个分析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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

替换QuickTest Professional(QTP)-我需要一个工具来测试Java应用程序

我需要一个MySQL查询来从表中查找总数

我需要一个文档准备工具来记录我的jersey rest网络服务

mysqli:为什么我需要一个“ if”语句来创建一个表?

我需要帮助来识别在另一个表中具有不同状态的表成员组

我需要一个查询来显示标记表,这里是我的表

我需要通过单击另一个表中的某个单元格来更改表中一个单元格的背景。

需要一个命令行解析器来满足我的要求

我有一个暴露在JAVA中的REST端点,需要通过Marklogic进行调用-最好的方法是什么?

为什么我们需要一个扫描器对象来在 java 中获取输入

需要一个CDATA事件来通知Java的stax解析器

为什么我需要添加双引号来打印java中char数组的第一个和最后一个元素

在 ruby 中,我需要一个反斜杠,但它给了我三个

我有一个宏来刷新工作簿中的所有数据透视表,我需要添加代码以删除(空白)

在Supercollider中,我需要选择Ndef来播放并从列表中停止前一个

这是一个代码,用于计算mysql表中的值的中位数,我需要一些专家来解释命令执行的顺序

我需要帮助来制作一个Java程序,该程序需要一个1到12的数字并输出一个月

需要一个脚本文件来清除Drupal数据库中的缓存表

Java脚本,我需要帮助来解决一个任务

我可以使用一个表来更新另一个表中的信息吗?

为什么我们需要一个接口来定义aem中的每个服务?

我需要一个if语句来在python中的数字之间移动

我需要帮助来理解一个公式

需要选择一个容器来存储我的数据

我需要一个等式来沿着椭圆运动

嗨,我需要帮助来解析Java中的JSON文件

我需要创建一个比普通表更难的表

我正在查询一个表,但我需要不同列中的输出

我需要使用Cross Apply来获取每个日期都有一个值的表