You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 11:10:48