如何将JavaScript对象写入JSON文件?导入模块报错求解
解决JSON文件写入问题的两种场景方案
你现在的核心问题是搞混了浏览器和Node.js的运行环境:fetch是浏览器端用来请求网络资源的API,而fs是Node.js专属的文件系统模块,两边的API不能混用,这才导致你导入模块时各种报错。
场景1:在浏览器环境中运行代码
浏览器出于安全限制,不允许直接读写本地文件,只能通过生成下载链接让用户手动保存的方式实现类似效果:
// 把对象转为JSON文件并触发下载 function saveAsJsonFile(obj, fileName = 'output.json') { // 将对象转为格式化的JSON字符串 const jsonContent = JSON.stringify(obj, null, 2); // 创建Blob对象存储JSON内容 const blob = new Blob([jsonContent], { type: 'application/json' }); // 创建临时下载链接 const downloadUrl = URL.createObjectURL(blob); // 创建a标签触发下载 const link = document.createElement('a'); link.href = downloadUrl; link.download = fileName; document.body.appendChild(link); link.click(); // 清理临时资源 document.body.removeChild(link); URL.revokeObjectURL(downloadUrl); } // 使用示例 const myData = { name: "张三", age: 25, hobbies: ["看书", "跑步"] }; saveAsJsonFile(myData);
场景2:在Node.js环境中运行代码
如果你的代码是在Node.js里跑的,那之前用fetch读本地文件是错误的,应该用Node.js的fs模块,同时解决模块导入问题:
方式1:使用CommonJS模块(无需修改配置)
直接用require导入fs的promise版本(异步操作更友好):
const fs = require('fs').promises; // 异步写入JSON文件 async function writeJsonFile(obj, filePath = './output.json') { try { const jsonContent = JSON.stringify(obj, null, 2); await fs.writeFile(filePath, jsonContent, 'utf8'); console.log('JSON文件写入成功'); } catch (error) { console.error('写入失败:', error); } } // 使用示例 const myData = { name: "张三", age: 25, hobbies: ["看书", "跑步"] }; writeJsonFile(myData);
方式2:使用ES模块(需修改package.json)
在项目的package.json中添加"type": "module",然后用import导入:
// package.json中添加这一行 { "type": "module" }
然后编写代码:
import { writeFile } from 'fs/promises'; // 异步写入JSON文件 async function writeJsonFile(obj, filePath = './output.json') { try { const jsonContent = JSON.stringify(obj, null, 2); await writeFile(filePath, jsonContent, 'utf8'); console.log('JSON文件写入成功'); } catch (error) { console.error('写入失败:', error); } } // 使用示例 const myData = { name: "张三", age: 25, hobbies: ["看书", "跑步"] }; writeJsonFile(myData);
内容的提问来源于stack exchange,提问作者NewBieJavaPro
相关产品推荐
相关产品推荐

