feat: 添加 JSON 转 Lua 配置文件功能
- 新增 json2lua.js 脚本,用于将 JSON 文件转换为 Lua 配置文件 - 更新 .gitignore 文件,忽略 luaConfigs 目录中的 StdItems.config 文件
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -3,3 +3,4 @@ package-lock.json
|
||||
config.xml
|
||||
/dist.zip
|
||||
dist/
|
||||
luaConfigs/StdItems.config
|
||||
|
||||
51
json2lua.js
Normal file
51
json2lua.js
Normal file
@@ -0,0 +1,51 @@
|
||||
const { log } = require('console');
|
||||
const fs = require('fs')
|
||||
const path = require('path');
|
||||
const folderPath = "./configs"
|
||||
function jsonToLua(jsonObj, indent = '', linefeed = '\n') {
|
||||
let luaStr = '';
|
||||
const strKey = key => isNaN(key) ? `${key}` : `[${key}]`;
|
||||
for (let key in jsonObj) {
|
||||
let value = jsonObj[key];
|
||||
key = strKey(key)
|
||||
if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
|
||||
// 对象
|
||||
luaStr += `${indent}${key} = {`;
|
||||
luaStr += jsonToLua(value, indent + ' ');
|
||||
luaStr += `${indent}},\n`;
|
||||
} else if (Array.isArray(value)) {
|
||||
// 数组
|
||||
luaStr += `${indent}${key} = {`;
|
||||
value.forEach(item => {
|
||||
|
||||
if (typeof item === 'string') {
|
||||
luaStr += `${indent} '${item}',`;
|
||||
} else {
|
||||
luaStr += `{${jsonToLua(item, '', '')}},`;
|
||||
}
|
||||
});
|
||||
luaStr += `${indent}},\n`;
|
||||
} else {
|
||||
// 基础类型
|
||||
if (typeof value === 'string') {
|
||||
luaStr += `${indent}${key}="${value}",${linefeed}`;
|
||||
} else {
|
||||
luaStr += `${indent}${key} = ${value},${linefeed}`;
|
||||
}
|
||||
}
|
||||
}
|
||||
return luaStr;
|
||||
}
|
||||
const start = () => {
|
||||
const files = fs.readdirSync(folderPath);
|
||||
|
||||
// 过滤出所有的 JSON 文件
|
||||
const jsonFiles = files.filter(file => path.extname(file) === '.json').filter(file => ["StdItems"].map(e => `${e}.json`).includes(file));
|
||||
jsonFiles.forEach(file => {
|
||||
const json = JSON.parse(fs.readFileSync(path.join(folderPath, file), 'utf8'))
|
||||
const filename = path.basename(file, path.extname(file));
|
||||
const luaConfig = `${filename}={\n${jsonToLua(json)}\n}`
|
||||
fs.writeFileSync(`./luaConfigs/${filename}.config`, luaConfig);
|
||||
});
|
||||
}
|
||||
start()
|
||||
Reference in New Issue
Block a user