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

NodeJS下Base64编解码键值对文本后转JSON失败问题求解

问题根因
  • 你的配置文件内容是逐行等号分隔的键值对格式,不符合JSON语法规范:合法JSON要求键名必须用双引号包裹、键和值用冒号分隔、整体结构包裹在大括号中,直接对原始键值对文本调用JSON.parse()必然解析失败。
  • 你使用的JSON.parse(JSON.stringify(decoded))是无效操作:JSON.stringify对字符串类型入参会做转义包裹,再执行JSON.parse只会得到原始字符串本身,完全不会完成键值对到JSON结构的转换。
  • 你的文本替换逻辑存在错误:.replace(/\n/g, '').replace(/\s/g, " ")会先删除所有换行符,再把所有空白字符替换为单个空格,直接把多行配置拼成无分隔的长字符串,彻底丢失键值对的行边界,进一步导致无法解析。
修复方案

不需要额外依赖,直接对解码后的文本按行拆分、逐行提取键值对组装为标准JS对象,即可得到合法的可序列化JSON结构,修正后的代码如下:

const fs = require('fs');

fs.readFile('./setting.txt', 'utf8', function(err, data) {
    if (err) throw err;
    
    // Base64编解码(Node原生Buffer实现,和第三方base64包结果一致,不需要额外装依赖)
    const encodedData = Buffer.from(data).toString('base64');
    const decoded = Buffer.from(encodedData, 'base64').toString('utf8');

    const config = {};
    // 按换行拆分每行,过滤空行、无效行
    decoded.split(/\r?\n/)
        .filter(line => line.trim() && line.includes('='))
        .forEach(line => {
            // 按第一个等号切割,兼容值中可能包含等号的场景
            const splitPos = line.indexOf('=');
            const key = line.slice(0, splitPos).trim();
            let value = line.slice(splitPos + 1).trim();
            // 数字类型值自动转数值,不需要可以注释该段逻辑直接保留字符串
            if (!isNaN(Number(value))) value = Number(value);
            config[key] = value;
        });

    // config就是标准JS对象,可直接序列化为合法JSON,也可直接用于业务字段填充
    // const legalJsonStr = JSON.stringify(config);
    return res.status(200).send(config);
});

解析完成后得到的标准JSON结构如下:

{
  "LENGTH": 1076,
  "CRC16": 28653,
  "OFFSET": 37,
  "MEASUREMENT_SAMPLING_RATE": 4,
  "MEASUREMENT_RANGE": 1,
  "MEASUREMENT_TRACE_LENGTH": 16384,
  "MEASUREMENT_PRETRIGGER_LENGTH": 0,
  "MEASUREMENT_UNIT": 2,
  "MEASUREMENT_OFFSET_REMOVER": 1
}
注意事项
  • 不要提前对解码后的全量文本做换行删除、全局空白替换操作,会破坏键值对的分隔边界,如需处理空白只需要对拆分后的单个键、值做首尾trim即可。
  • 如果你的配置项值存在布尔类型、空值等特殊格式,可以在遍历行的逻辑里加对应的类型转换规则即可。

内容的提问来源于stack exchange,提问作者Xandar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:21:47