如何用JavaScript将ES6模块中的导出对象转为JSON文件?
用纯JavaScript实现ES6模块转JSON文件
针对你的需求——把places.mjs(内容为export default { STATES: { 'AU' : {...}, 'US' : {...} } };)转换为JSON文件,这里提供两种纯JS实现方案:
方案一:文本处理+解析(兼容非标准JSON语法)
如果你的places.mjs里包含单引号、末尾逗号这类JSON不支持的语法,适合用这种方式,借助JSON5来解析非标准JSON结构:
import fs from 'fs/promises'; import JSON5 from 'json5'; async function mjsToJson() { // 读取mjs文件 const rawContent = await fs.readFile('./places.mjs', 'utf8'); // 移除"export default"前缀和末尾分号 const cleanedStr = rawContent.replace(/^export default /, '').replace(/;$/, ''); // 解析为JS对象(JSON5支持单引号、省略逗号等语法) const data = JSON5.parse(cleanedStr); // 格式化写入JSON文件 await fs.writeFile('./places.json', JSON.stringify(data, null, 2)); console.log('转换完成:places.json已生成'); } // 执行转换 mjsToJson().catch(err => console.error('转换出错:', err));
方案二:动态导入ES模块(更规范的方式)
如果你的运行环境支持ES模块(比如在package.json中设置"type": "module"),可以直接动态导入模块获取导出对象,无需文本处理:
import fs from 'fs/promises'; async function mjsToJson() { // 动态导入places.mjs模块 const { default: placesData } = await import('./places.mjs'); // 写入JSON文件 await fs.writeFile('./places.json', JSON.stringify(placesData, null, 2)); console.log('转换完成:places.json已生成'); } // 执行转换 mjsToJson().catch(err => console.error('转换出错:', err));
注意事项
- 方案二需要确保环境支持ES模块,否则会报错;
- 如果
places.mjs中的对象包含函数、Symbol等不可序列化内容,JSON.stringify会自动忽略这些值,需提前处理; - 使用方案一的话,需要先安装
JSON5:npm install json5
内容的提问来源于stack exchange,提问作者gordon11235
相关产品推荐
相关产品推荐

