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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 01:49:56