如何在Groovy中解析.js配置文件,使用JsonSlurper解析失败该如何处理
你提供的内容是Node.js模块导出的配置对象,不属于标准JSON格式(存在单引号包裹字符串、对象属性尾逗号、前缀导出声明),所以直接用JsonSlurper解析会失败。下面是两种可行的Groovy解析方案:
方案1:字符串预处理后使用JsonSlurper解析
适合配置格式固定、没有额外JS特殊语法(如注释、变量引用)的场景,实现简单效率高:
import groovy.json.JsonSlurper // 读取config.js全部内容 def jsContent = new File("config.js").text // 字符串预处理 def jsonStr = jsContent // 去除前缀导出声明和末尾分号 .replaceFirst(/^exports\.config = /, "") .replaceFirst(/;$/, "") // 单引号替换为标准JSON要求的双引号 .replaceAll(/'/, '"') // 移除所有对象/数组的尾逗号 .replaceAll(/,(\s*[}\]])/, '$1') // 解析得到配置对象 def config = new JsonSlurper().parseText(jsonStr) // 测试取值 println config.tests // 输出 ./test/lib/test*.js println config.helpers.WebDriver.browser // 输出 chrome
方案2:使用Groovy内置JavaScript引擎直接执行解析
通用方案,不需要做复杂字符串预处理,兼容所有合法JS配置写法:
import javax.script.ScriptEngineManager // 读取config.js全部内容 def jsContent = new File("config.js").text // 初始化JS引擎执行代码 def engine = new ScriptEngineManager().getEngineByName("javascript") engine.eval(jsContent) // 直接获取导出的config对象 def config = engine.get("config") // 测试取值 println config.plugins.wdio.services[0] // 输出 selenium-standalone println config.testData // 输出 ./test/resources/testData/
内容的提问来源于stack exchange,提问作者Manoj Rajan
相关产品推荐
相关产品推荐

