将Lua数据转换为JSON。
这个 EPGP World of Warcraft 插件 会输出一个叫 epgp.lua 的数据库文件。
我写了一个 插件 来将 Lua 数据转换成 JSON 对象,以在公会网站上显示。它在旧版本的插件中可以工作,但现在我想让它正确地转换这个文件,但遇到了一些问题。这里有两个示例显示了转换问题-请查看 此演示。
第一个示例能够很好地形成一个嵌套数组:
["roster_info"] = {
{
"Agantica", -- [1]
"ROGUE", -- [2]
"09/03-2013", -- [3]
}, -- [1]
{
"Intikamim", -- [1]
"PALADIN", -- [2]
"17/02-2013", -- [3]
}, -- [2]
},
变成了
"roster_info": [
[
"Agantica",
"ROGUE",
"09/03-2013"
],
[
"Intikamim",
"PALADIN",
"17/02-2013"
]
]
但字符串替换把下一个示例看成了嵌套数组,而它应该是一个对象,放在一个数组中:
["bonus_loot_log"] = {
{
["player"] = "Magebox",
["timestamp"] = "2013-03-07 13:44:00",
["coinsLeft"] = "-1",
["reward"] = "|cffa335ee|Hitem:86815:0:0:0:0:0:0:632235520:90:0:445|h[Attenuating Bracers]|h|r",
}, -- [1]
{
["player"] = "Lîutasila",
["coinsLeft"] = "-1",
["timestamp"] = "2013-03-07 13:47:00",
}, -- [2]
},
变成了
"bonus_loot_log": [
[
"player": "Magebox",
"timestamp": "2013-03-07 13:44:00",
"coinsLeft": "-1",
"reward": "|cffa335ee|Hitem:86815:0:0:0:0:0:0:632235520:90:0:445|h[Attenuating Bracers]|h|r"
],
[
"player": "Lîutasila",
"coinsLeft": "-1",
"timestamp": "2013-03-07 13:47:00"
]
]
下面是只能在第一个示例中使用的字符串转换脚本。
lua_string
.replace(/\[(.*)\]\s\=\s/g,'$1:') // 将 = 更改为冒号并删除外部括号
.replace(/[\t\r\n]/g,'') // 删除制表符和回车
.replace(/\}\,\s--\s\[\d+\]\}/g,']]') // 用方括号替换以注释结尾的集合
.replace(/\,\s--\s\[\d+\]/g,',') // 删除关闭子组和注释
.replace(/,(\}|\])/g,'$1') // 删除尾随逗号
.replace(/\}\,\{/g,'],[') // 用方括号替换大括号集合
.replace(/\{\{/g,'[[') // 将双花括号更改为方括号
.replace(/EPGP_DB\s\=/,'');
因此,我需要一些帮助来使 Lua 在对象数组(第二个示例)中正确转换。
// 将 EPGP_DB 从 LUA 格式转化为 JSON 格式 var str = document.getElementsByTagName('data')[0].innerHTML; var diff; do { // 用方括号替换数组周围的花括号 diff = str.length; str = str.replace(/{(((\n\t*)\t)\S.(\2.)),\s--\s[\d+]\3}/g,'[$1$3]'); diff = diff - str.length; } while (diff > 0); str = str .replace(/EPGP_DB\s=\s/, '') // 移除变量定义 .replace(/\s--\s[\d+](\n)/g, '$1') // 移除注释 .replace(/,(\n\t})/g, '$1') // 移除末尾逗号 .replace(/[(.*?)]\s=\s/g,'$1:') // 将等号改为冒号, 移除括号 .replace(/[\t\r\n]/g,''); // 移除制表符和回车符 console.log(str); json = window.JSON.parse(str); console.log(json); document.getElementById('result').innerText = json.global.last_version;
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
一般情况下,你不能只用字符串操作就将Lua表格转换为JSON数据。问题在于,虽然Lua将表格用于数组和字典,但JSON需要两种不同的类型。还有其他的语法差异。
这可以通过一个模块来解决,该模块可以在Lua和JSON之间进行转换。请查看Lua wiki上的JSON模块,找到一个将Lua转换为JSON的Lua模块。有多个模块可供选择,其中一些是纯Lua,非常适合嵌入到魔兽世界中。它们可以正确地检测表格是否表示为数组或字典,并输出相应的JSON。