diff --git a/.gitignore b/.gitignore index a081583..e08c6c1 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ package-lock.json config.xml /dist.zip dist/ +luaConfigs/StdItems.config diff --git a/json2lua.js b/json2lua.js new file mode 100644 index 0000000..78be4a3 --- /dev/null +++ b/json2lua.js @@ -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() \ No newline at end of file