修改JSON文件ifRegenerateQR值后,如何用fs.writeFile写入文件?
解决JSON文件属性修改后持久化写入的问题
你遇到的问题很典型——你只是修改了内存中解析后的JSON对象,但没有把修改后的内容写回磁盘,所以文件里的内容根本没变化。要实现持久化,必须把修改后的对象重新序列化成JSON字符串,再用fs.writeFile()(或同步版fs.writeFileSync())写入原文件。
具体步骤和代码示例
方法1:同步写法(和你原来的readFileSync风格一致)
这种写法简单直接,适合脚本类场景(不会长时间阻塞事件循环):
const fs = require('fs'); const userInfoFile = './user-info.json'; // 替换成你的实际文件路径 // 1. 读取文件并解析为JSON对象 const userData = JSON.parse(fs.readFileSync(userInfoFile)); // 2. 修改目标属性 userData.ifRegenerateQR = false; // 3. 把对象序列化为格式化的JSON字符串(第三个参数2是缩进空格,让文件更易读) const updatedData = JSON.stringify(userData, null, 2); // 4. 写入文件,覆盖原内容 fs.writeFileSync(userInfoFile, updatedData); console.log("文件已成功更新!");
方法2:异步写法(推荐,Node.js非阻塞最佳实践)
如果是在服务端或需要处理大量IO的场景,异步写法不会阻塞事件循环:
const fs = require('fs').promises; // 使用promise版本的fs API,代码更简洁 const userInfoFile = './user-info.json'; async function updateQRFlag() { try { // 1. 异步读取文件内容 const fileContent = await fs.readFile(userInfoFile, 'utf8'); const userData = JSON.parse(fileContent); // 2. 修改目标属性 userData.ifRegenerateQR = false; // 3. 序列化为格式化的JSON字符串 const updatedData = JSON.stringify(userData, null, 2); // 4. 异步写入文件 await fs.writeFile(userInfoFile, updatedData); console.log("文件已成功更新!"); } catch (err) { console.error("更新文件时出错:", err); } } // 调用执行函数 updateQRFlag();
验证修改结果
执行代码后,你的JSON文件内容会变成:
{
"name": "hi",
"email": "hi@mail.com",
"secFactorType": "microsoftTotpAuth",
"loginid": "9867033239",
"timezone": "+5.5",
"workStartHours": "0900",
"workEndHours": "1700",
"ifRegenerateQR": false
}
关键注意点
- 一定要用
JSON.stringify()把对象转成字符串,直接写入对象的话,文件里会出现[object Object]这种无效内容 JSON.stringify的第三个参数可以控制格式化缩进,方便后续查看和编辑文件- 若担心文件读写失败,记得加上错误处理(异步写法用try/catch,同步写法也可以用try/catch包裹逻辑)
内容的提问来源于stack exchange,提问作者Aarushi Bhatia
相关产品推荐
相关产品推荐

