如何在Node.js中读写对象数组到文件并避免数据丢失
问题解决方法
你的核心问题是直接拼接对象到字符串时,嵌套的数组/对象会被转成[object Object],必须用JSON序列化和反序列化来处理复杂数据结构,以下是修正后的完整方案:
1. 修正数据读取逻辑
读取文件后要先把JSON字符串解析为JavaScript对象,才能正常访问属性:
const fs = require('fs'); const file = "../../people.txt"; // 初始化数据,处理文件不存在或解析失败的情况 let people; try { const fileContent = fs.readFileSync(file, 'utf8'); people = JSON.parse(fileContent); } catch (err) { // 文件不存在或损坏时用默认数据初始化 people = {name:'list 1',mode:0,friends:[{user:1,code:'red'},{user:2,code:'blue'}]}; } // 按需解构变量(也可以直接操作people对象) let { name, mode, friends } = people;
2. 修正数据保存逻辑
用JSON.stringify()把整个对象转成标准JSON字符串,避免手动拼接的错误:
function update() { // 更新变量 name = 'new list'; mode = 1; friends = [{user:4,code:'red'},{user:6,code:'blue'}]; // 同步更新到people对象 people = { name, mode, friends }; // 序列化并写入文件 fs.writeFileSync(file, JSON.stringify(people), { encoding: 'utf8', flag: 'w' }); }
关键原理说明
JSON.stringify()会把JavaScript对象/数组转换成可存储的JSON字符串,所有嵌套结构都会被正确格式化,不会出现[object Object]的问题。JSON.parse()能把文件中的JSON字符串还原为JavaScript对象,此时才能正常访问name、mode、friends这些属性。- 添加
try-catch是为了处理首次运行时文件不存在的场景,避免程序崩溃。
内容的提问来源于stack exchange,提问作者Cain Nuke
相关产品推荐
相关产品推荐

