1. ホーム
  2. javascript

[解決済み] Node.jsでオブジェクトをファイルに書き込む

2023-01-14 21:29:01

質問

このためにstackoverflow / googleをくまなく探したのですが、なかなか解決しません。

私は指定された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, [オプション]) は、以下のいずれかを必要とします。 String または Buffer をdataパラメータで指定します。 ドキュメントを見る .

配列を文字列形式で書いてみる。

// 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');

edit: この例で配列が表示されている理由は、nodeの実装が console.log を呼び出すだけでなく toString を呼び出すだけでなく util.format console.jsのソースを見る