2017-05-11 2 views
1

私はhereのソリューションの1つに従っています。ソリューションはコンソールにログアウトしますが、保存方法はわかりません。そのため、.jsonファイルを読みやすくなります。私はファイルシステムモジュールを使って.jsonへの出力を記録しようとしました。私はそれを複数の行にすべて印刷する方法を知らない。それはすべて1行で出てくる。 new.jsonのjs-xlsxで複数の行にJSONを出力

var fs = require('fs'); 
var XLSX = require('xlsx'); 
var workbook = XLSX.readFile('test.xlsx'); 
var sheet_name_list = workbook.SheetNames; 
sheet_name_list.forEach(function(y) { 
    var worksheet = workbook.Sheets[y]; 
    var headers = {}; 
    var data = []; 
    for(z in worksheet) { 
     if(z[0] === '!') continue; 
     //parse out the column, row, and value 
     var col = z.substring(0,1); 
     var row = parseInt(z.substring(1)); 
     var value = worksheet[z].v; 

     //store header names 
     if(row == 1) { 
      headers[col] = value; 
      continue; 
     } 

     if(!data[row]) data[row]={}; 
     data[row][headers[col]] = value; 
    } 
    //drop those first two rows which are empty 
    data.shift(); 
    data.shift(); 
    //console.log(data); 
    fs.writeFileSync("new.json", JSON.stringify(data), function(err) { 
     if(err) { 
      return console.log(err); 
     } 
    }); 
}); 

出力

[{"key":"AprilA45","Food":"Sandwich","yr":2017,"mo":"April" ... 

答えて

1

あなたは具体的には、stringify方法にspaceパラメータを追加の引数を使用することによって、これを達成することができます:

読みやすさのために、出力JSON文字列に空白を挿入するために使われている文字列または数値オブジェクト。これが数値の場合は、空白として使用する空白文字の数を示します。この数値は10で上限が設定されます(値が大きい場合は値が10になります)。 1未満の値は、スペースを使用しないことを示します。これが文字列の場合、文字列(またはそれよりも長い場合は文字列の最初の10文字)が空白として使用されます。このパラメータが指定されていない場合(またはnullの場合)、空白は使用されません。

ここには、あなたが望むものを示すブラウザベースの例があります。最初のdivは現在取得しているものです。二divが何をしたいです:

let data = {"foo": ["bar", "baz"], "qux": "quux"}; 
 
document.getElementById("first").innerHTML = "<pre>" + JSON.stringify(data) + "</pre>"; 
 
document.getElementById("second").innerHTML = "<pre>" + JSON.stringify(data, null, 2) + "</pre>";
<div id="first"></div> 
 
<div id="second"></div>

だからあなたのコードは次のようになります。

fs.writeFileSync("new.json", JSON.stringify(data, null, 2), function(err) { 
    if(err) { 
     return console.log(err); 
    } 
}); 
0

使用Array.mapとArray.join。

//行末文字を取得します

のconstのEOL =必要( 'OS​​')EOL。

//文字列化各アレイ内のオブジェクトと改行文字

データ= data.map(OBJ => JSON.stringify(OBJ))に参加(EOL)の配列を結合します。

//(...)

fs.writeFileSyncをファイルにデータを書き込みます。

+0

私は 'データ= data.map(OBJ => JSON.stringify(OBJ)を追加しました).join(EOL); 'ファイルを書く前に、' const EOL = require( 'os')。EOL; 'は、コードの始めに、他のすべてが必要です。私はこれを持っています: "" \ "キー\":\ "AprilA45 \"、\ "食品\":\ "サンドウィッチ\"、\ " – myhouse

関連する問題