Node.js实现多JSON文件合并为单文件并以文件路径为键的方案咨询
JSON多文件合并实现方案
现有代码修正点
你当前代码有两处可调整:
- 生成的
jsonFullPath末尾多加了多余的.,需要删掉最后的+ '.',避免最终键名结尾出现多余点号 - 如果你的键需要保留路径中的语言标识(比如示例中的
en_US),正则可以简化为只匹配.json后缀,避免把语言标识误删
完整实现代码
const fs = require('fs'); const path = require('path'); // 配置项,替换为你实际的路径 const rootDir = './你的项目根目录'; // 计算相对路径的基准根目录 const jsonFileList = []; // 你已经遍历得到的所有JSON文件绝对路径数组 const outputPath = './merged.json'; // 合并后文件的输出路径 // 初始化合并结果对象 const mergedJson = {}; // 遍历所有JSON文件处理 jsonFileList.forEach(filePath => { // 生成点分隔的键名 const keyName = path.relative(rootDir, filePath) .split(path.sep) .join('.') .replace(/\.json$/, ''); // 若确实需要移除文件名中的语言后缀,可替换为你原来的正则:.replace(/(_[a-z]{2}(_[A-Z]{2})?)?\.json/, '') // 读取解析单个JSON文件 const rawContent = fs.readFileSync(filePath, 'utf-8'); const fileContent = JSON.parse(rawContent); // 写入合并对象 mergedJson[keyName] = fileContent; }); // 输出合并后的JSON文件 fs.writeFileSync(outputPath, JSON.stringify(mergedJson, null, 2), 'utf-8');
补充说明
JSON.stringify的第三个参数设为2是为了生成格式化的易读JSON,如果需要压缩体积可以去掉该参数- 如果你需要生成嵌套对象结构而非扁平化的点分隔键,可以自行加逻辑拆分
keyName按层级写入,按你给出的示例需求,直接用点分隔字符串作为键即可满足要求
内容的提问来源于stack exchange,提问作者Hani
相关产品推荐
相关产品推荐

