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

Node.js使用fs写入对象数组到文件显示[object Object]如何解决

问题原因

直接在模板字符串中传入JS对象时,运行时会自动调用对象的toString()方法做隐式类型转换,普通普通对象(Plain Object)的默认toString()返回值固定为[object Object],因此写入文件的内容全是该字符串,无法展示对象实际内容。

修正方法

要输出你预期的JS对象字面量格式,使用Node.js内置的util模块提供的inspect方法格式化对象即可,该方法会将对象转换为符合JS语法的可读字符串,不会出现类型转换问题。
完整修正代码如下:

const fs = require('fs');
const util = require('util'); // 引入内置格式化工具模块
const writeStream = fs.createWriteStream('file.txt');
const pathName = writeStream.path;
   
// 格式化对象后再写入,匹配预期的缩进、单行、末尾加逗号的格式
array.forEach(value => writeStream.write(`  ${util.inspect(value, { compact: true })},\n`));

// 所有数据写入完成触发
writeStream.on('finish', () => {
   console.log(`wrote all the array data to file ${pathName}`);
});

// 写入错误处理
writeStream.on('error', (err) => {
    console.error(`There is an error writing the file ${pathName} => ${err}`)
});

// 关闭流
writeStream.end();

补充说明

  • util.inspect()的compact: true配置会让对象保持单行紧凑输出,和你给出的预期格式完全一致;如果去掉该配置,默认会将对象的每个键值对拆分为多行输出。
  • 如果你不需要严格匹配JS源码格式,仅做结构化数据存储,也可以替换为JSON.stringify(value)做序列化,但该方法输出的是标准JSON格式,键名和字符串都会使用双引号,和你预期的展示效果有差异。
  • 900条小对象的写入场景无需额外处理流背压,如果后续数组量级提升到十万条以上,建议监听write()方法的返回值处理背压,避免内存占用过高。

内容的提问来源于stack exchange,提问作者qubitz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:21:31