2017-02-21 14 views
1

ユーザーがボタンを押して、NodeJSを使用してデータベースにSQLクエリを実行し、その結果がJSONオブジェクト(オブジェクトを含む1つの配列)です。その後、結果をファイルに保存する必要があります(ユーザーはファイルが必要です)。JSONオブジェクトをCSVに変換してファイルに保存します

問題:JSONにすることはできません。形式は、simbolで区切られた値 ";"と1行に1つのオブジェクトだけです。私は(それはCSVのようなもの)を作成する必要があり、ファイルの内容の

例:

1;tree;green 
2;car;red 
3;Robert's house;white 

この結果クエリは約18000行があります。それは大きいです。

私はの方法を置き換える使用していますが、私はロバートの家にようsimbol "との値に問題があるため、文字列の初めとして解釈コンソール。私が使用するクライアント側のその後

$window.open('data:text/csv,' + encodeURIComponent(myString)); 

そしてここsimbols は「問題を開始

JSONをその形式(NodeJSの下)に変換する方法とファイルを作成する方法を知りたいと思います。

+0

の可能性のある重複した[変数にCSV形式やストアにJSONに変換する方法](のhttp:// stackoverflowの.com/questions/8847766/how-to-convert-json-to-csv-format-and-a-variable) – Nobita

答えて

1

二重引用符を使用して文字列を表す」と、あなたは、単一引用符を使用することができます 『その中に例:。

var sql = "SELECT * FROM table WHERE USER='John'"; 

、単一引用符で問題を文字で文字を読んで、それゆえ避けるために』、使用を最初に行を別々の単語に分割し、CSVの列に割り当てることができます。

EDIT: .jsonファイルを読み込むコードを書きました(データベースから取得します)。 、同じもの)、csvファイルを出力します。

var fs = require('fs'); 
var obj = JSON.parse(fs.readFileSync("data.json", "utf-8")); 
var stream = fs.createWriteStream("data.csv"); 

stream.once('open', function(fd){ 
    for (var i = 0; i < obj.person.length; i++) { 
     var string = obj.person[i].id + ";" + obj.person[i].name + ";" + obj.person[i].age + "\n"; 
     stream.write(string); 
    } 
    stream.end(); 
}); 

次に、CSVファイルで必要な操作を行うことができます。

EDIT:尋ねたとして、ここで私は私のプロジェクトの一つにファイルを送信する方法である:

router.get('/download/:name', function (req, res, next) { 
    var file = './public/data/' + req.params.name; //file is saved in /public/data first 
    var filename = path.basename(file); 
    var mimetype = mime.lookup(file); 
    res.setHeader('Content-disposition', 'attachment; filename=' + filename); 
    res.setHeader('Content-type', mimetype); 

    var filestream = fs.createReadStream(file); 
    filestream.pipe(res); 
}); 
+0

これはサーバー側で実行されます。 CVSファイルをクライアントに送信するにはどうすればよいですか? –

+0

ご返信ありがとうございました。ご質問に基づいて回答を編集しました –

関連する問題