【问题标题】:How to write each values from Object to each line in a text file如何将对象中的每个值写入文本文件中的每一行
【发布时间】:2019-08-10 04:43:21
【问题描述】:

我有一个

object = { line1: 123, line2: 456 };

我想把它写到一个文本文件中。

打开文本文件时的输出是这样的。

123
456

我试过了,但是不行

var json_data = require(`${__dirname}/output.json`);

var objectlength = Object.keys(json_data).length;
for ( var i = 0; i < objectlength; i++ ){
    console.log ( i );

    var write_to_txt = fs.writeFileSync(`${__dirname}/output.txt`, 
        json_data.line+i, null, '\t');

}

【问题讨论】:

  • 要记住的一件事是阅读您使用的功能,做什么,这样您就知道会发生什么怪癖。特别是在这种情况下,fs.writeFile 有一个很难错过的位,上面写着“当文件是文件名时,异步将数据写入文件,如果文件已经存在则替换文件(强调我的) . 数据可以是字符串或缓冲区。”因此,对同一文件名的连续调用将清除您之前编写的任何内容。

标签: javascript node.js loops


【解决方案1】:

一种方法是为此使用流:

var stream = fs.createWriteStream(`${__dirname}/output.txt`, {flags:'a'});
Object.keys(json_data).map( function (item,index) {
    stream.write(json_data[key]+ "\n");
});
stream.end();

考虑一下为什么在连续写入同一个文件时应该更喜欢流。 https://stackoverflow.com/a/43370201/6517383

或者您可以像这样使用fs.appendFileSync

Object.keys(json_data).map(key => {
 fs.appendFileSync(`${__dirname}/output.txt`, json_data[key]+ "\n", function (err) {
  if (err) throw err;
  console.log('Saved!');
 });
});

【讨论】:

  • @Tramyer 从第二种方法来看,修复应该相当明显......将json_data[key]更改为json_data[key]+ "\n"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多