使用Node.js将对象写入文件

我已经search了所有的这个stackoverflow /谷歌,但似乎无法弄清楚。

我正在抓取给定URL页面的社交媒体链接,该函数返回一个包含URL列表的对象。

当我尝试将这些数据写入一个不同的文件时,它将以[object Object]输出到文件中,而不是预期的:[' https://twitter.com/#!/101Cookbooks','http:// www。 facebook.com/101cookbooks '],就像我console.log()的结果。

这是我在Node中读写文件的悲哀尝试,试图读取每行(url)并通过函数调用request(line, gotHTML)

 fs.readFileSync('./urls.txt').toString().split('\n').forEach(function (line){ console.log(line); var obj = request(line, gotHTML); console.log(obj); fs.writeFileSync('./data.json', obj , 'utf-8'); }); 

供参考 – gotHTML函数:

 function gotHTML(err, resp, html){ var social_ids = []; if(err){ return console.log(err); } else if (resp.statusCode === 200) { var parsedHTML = $.load(html); parsedHTML('a').map(function(i, link){ var href = $(link).attr('href'); for(var i=0; i<socialurls.length; i++){ if(socialurls[i].test(href) && social_ids.indexOf(href) < 0 ) { social_ids.push(href); }; }; }) }; return social_ids; }; 

obj是你的例子中的一个数组。

fs.writeFileSync(filename,data,[options])需要数据参数中的StringBuffer 。 看文档 。

尝试以string格式写入数组:

 // writes 'https://twitter.com/#!/101Cookbooks', 'http://www.facebook.com/101cookbooks' fs.writeFileSync('./data.json', obj.join(',') , 'utf-8'); 

要么:

 // writes ['https://twitter.com/#!/101Cookbooks', 'http://www.facebook.com/101cookbooks'] var util = require('util'); fs.writeFileSync('./data.json', util.inspect(obj) , 'utf-8'); 

编辑:在你的例子看到数组的原因是因为节点的console.log的实现不只是调用toString ,它调用util.format 请参阅console.js源

基于deb2fast的说法,我还会传入一些额外的参数给JSON.stringify()以获得相当的格式:

 fs.writeFile('./data.json', JSON.stringify(obj, null, 2) , 'utf-8'); 

第二个参数是一个可选的replace函数,在这种情况下你不需要这样的替代函数。

第三个参数是用于缩进的空格的数量。 2和4似乎是stream行的select。

如果您正在创build[object object]则使用JSON.stringify

fs.writeFile('./data.json', JSON.stringify(obj) , 'utf-8');

它为我工作。

根据我的经验,JSON.stringify比util.inspect稍快。 我不得不将DB2查询的结果对象保存为json文件,查询返回了92k行的对象,转换花费很长时间才能完成util.inspect,所以我通过编写相同的1000个logging对象使用这两种方法的文件。

  1. JSON.Stringify

     fs.writeFile('./data.json', JSON.stringify(obj, null, 2)); 

时间:3:57(3分57秒)

结果格式:

 [ { "PROB": "00001", "BO": "AXZ", "CNTRY": "649" }, ... ] 
  1. util.inspect

     var util = require('util'); fs.writeFile('./data.json', util.inspect(obj, false, 2, false)); 

时间:4:12(4分12秒)

结果格式:

 [ { PROB: '00001', BO: 'AXZ', CNTRY: '649' }, ... ]