用Js-xlsx输出JSON到多行

我遵循这里的一个解决scheme。 该解决scheme注销到控制台,但我不知道如何保存,所以看起来很容易阅读.json文件。 我试过使用文件系统模块来logging输出到.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); } }); }); 

new.json的输出

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

您可以通过使用stringify方法的附加参数来实现此目的,特别是space参数:

用于将空白插入输出JSONstring以便读取的string或数字对象。 如果这是一个数字,它表示用作空白的空格字符的数量; 这个数字被限制在10(如果它更大,那么值就是10)。 值小于1表示不应该使用空格。 如果这是一个string,则string(或string的前10个字符,如果它比这更长)用作空格。 如果未提供此参数(或为空),则不使用空格。

这是一个基于浏览器的例子,显示你想要什么 – 第一个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> 

使用Array.map和Array.join。

//获取行尾字符

const EOL = require('os')。EOL;

//将数组中的每个对象进行string化,并用换行符连接数组

data = data.map(obj => JSON.stringify(obj))。join(EOL);

//将你的数据写入文件

fs.writeFileSync(…);