【问题标题】:Output JSON to multiple lines with js-xlsx使用 js-xlsx 将 JSON 输出到多行
【发布时间】:2017-10-10 21:11:42
【问题描述】:

我遵循here 的解决方案之一。该解决方案很好地注销到控制台,但我不知道如何保存,因此看起来很容易读取到 .json 文件。我尝试使用文件系统模块将输出记录到 .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" ...

【问题讨论】:

    标签: javascript json node.js excel js-xlsx


    【解决方案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);
        }
    }); 
    

    【讨论】:

      【解决方案2】:

      使用 Array.map 和 Array.join。

      //获取行尾字符

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

      // 对数组中的每个对象进行字符串化,并用换行符加入数组

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

      // 将数据写入文件

      fs.writeFileSync(...);

      【讨论】:

      • 我在编写文件之前添加了data = data.map(obj =&gt; JSON.stringify(obj)).join(EOL);,并在代码开头添加了const EOL = require('os').EOL;,所有其他要求都是。我得到了这个:"{\"key\":\"AprilA45\",\"Food\":\"Sandwich\",\"yr\" ...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多