Node.js中将含多级参数的.dal文件转换为JSON的报错问题
解决键与冒号间空格导致的JSON转换错误问题
你的问题出在原函数用split(' ')分割内容,当键和冒号之间有多个空格时,会把键、空格、冒号拆成多个独立元素,后续处理时会生成无效的JSON语法(比如出现"firstName" "":这种错误结构)。下面是修复后的实现,改用正则批量处理格式问题,避免拆分空格带来的错误:
function getProtoMessageParams(functionName) { const fileName = 'user'; const content = fs.readFileSync(process.cwd() + "/src/dals/" + fileName + ".dal").toString(); // 提取目标函数块内容 let protoParams = content.split(functionName)[1].split('//- RR')[0].trim(); // 1. 处理键名:给键加引号,同时去掉键和冒号之间的所有空格 protoParams = protoParams.replace(/(\w+)\s*:/g, '"$1":'); // 2. 处理布尔值:保留true/false的原生格式,不加引号 protoParams = protoParams.replace(/:\s*(true|false)([,}])/g, ': $1$2'); // 3. 处理字符串值:给非布尔的字面量值加引号(比如unary、string这类) protoParams = protoParams.replace(/:\s*(\w+)([,}])/g, ': "$1"$2'); // 4. 处理多余的换行和连续空格(可选,让JSON更整洁) protoParams = protoParams.replace(/\s+/g, ' '); return JSON.parse(protoParams); }
关键改动说明:
- 去掉了原函数中按空格拆分再逐个处理的逻辑,改用正则一次性修正格式,避免拆分空格带来的元素混乱
- 用
/(\w+)\s*:/g匹配所有键名+任意空格+冒号的结构,替换成带引号的键名+冒号,彻底解决键与冒号间空格的问题 - 区分处理布尔值和普通字符串值,确保JSON语法合法(JSON中布尔值不需要引号,字符串需要)
- 最后清理多余的空白字符,保证JSON解析时不会出现意外问题
测试你的示例.dal文件,即使键和冒号之间有多个空格(比如firstName :),也能正确转换为合法的JSON对象。
内容的提问来源于stack exchange,提问作者sameer
相关产品推荐
相关产品推荐

