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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:20:58