【问题标题】:Array of Arrays to Json数组到 Json 的数组
【发布时间】:2017-05-25 06:03:13
【问题描述】:

我正在循环将数组数组转换为对象,我正在使用逗号“”拆分,但如果我的值有一些逗号,它也会被拆分。例如:如果我的值的日期为 2017 年 5 月 2 日,它实际上是一个值,但它会拆分为 5 月 2 日作为一个值,而 2017 年作为另一个值,所以我的整个对象都在发生变化。需要帮助

我正在阅读 Excel 表格。我的输出是数组数组。我需要将其转换为 json 对象。

var xls = require('excel');
 describe('TransactionDetails-Excel', function () {    
     it('External Type G Tranasaction Details validation', function (done) {
        xls('transactions.xlsx', function(err, data) {
            if(err){ 
                throw err;
            }
            else{
                console.log(data);
                console.log(JSON.stringify(convertToJSON(data)));
                done();
            }
        });
    function convertToJSON(array) {
        var first = array[0].join();
        var headers = first.split(',');
        var jsonData = [];
        for ( var iterator_i = 1, length = array.length; iterator_i < length; iterator_i++ ){
            var myRow = array[iterator_i].join();
            var row = myRow.split(',');
            var data = {};
            for ( var x = 0; x < row.length; x++ ){
                data[headers[x]] = row[x];
            }
            jsonData.push(data);
        }
        return jsonData;
    }
 });
 });

Excel 工作表:transactions.xlsx click here to view screenshot of excel sheet

输出:数据

[ [ 'Transaction Id', 'Paid ', 'Time Created' ],
  [ '0YC0',
    'Joe\'s Generic Business \nperson@gmail.com',
    'Mar 2, 2012 14:28:36 PST' ],
  [ '8uyhr', 'mail@gmail.com', 'May 2, 2015  15:20:20 PST' ],
  [ '786YUH', 'mailtome@gmail.com', 'May 18, 2017 13:20:30 PST' ] ]

输出://这是我得到的

[{"Transaction Id":"0YC0","Paid ":"Joe's Generic Business \nperson@gmail.com","Time Created":"Mar 2","undefined":" 2012 14:28:36 PST"},   
{"Transaction Id":"8uyhr","Paid ":"mail@gmail.com","Time Created":"May 2","undefined":" 2015  15:20:20 PST"},    
{"Transaction Id":"786YUH","Paid ":"mailtome@gmail.com","Time Created":"May 18","undefined":" 2017 13:20:30 PST"}]

但最终的对象应该是:

[{"Transaction Id":"0YC0","Paid ":"Joe's Generic Business \nperson@gmail.com","Time Created":"Mar 2, 2012 14:28:36 PST"},   
    {"Transaction Id":"8uyhr","Paid ":"mail@gmail.com","Time Created":"May 2, 2015  15:20:20 PST"},    
    {"Transaction Id":"786YUH","Paid ":"mailtome@gmail.com","Time Created":"May 18, 2017 13:20:30 PST"}]

提前致谢。

【问题讨论】:

标签: javascript arrays json node.js


【解决方案1】:

使用这个函数

function convertToJSON(array) {
  var objArray = [];
  for (var i = 1; i < array.length; i++) {
    objArray[i - 1] = {};
    for (var k = 0; k < array[0].length && k < array[i].length; k++) {
      var key = array[0][k];
      objArray[i - 1][key] = array[i][k]
    }
  }

  return objArray;
}

【讨论】:

    【解决方案2】:

    您可以通过拆分标签和数据轻松做到这一点,然后执行以下操作:

    var labels = data[0]
    var output = data.slice(1).map(item => item.reduce((obj, val, index) => {
      obj[labels[index]] = val
      return obj
    }, {}))
    

    这是通过map将数组中的每个项目添加到一个新数组来实现的。每个项目都经过reduce,它将数据值转换为具有正确键的对象。

    小提琴here

    【讨论】:

      【解决方案3】:

      加入一些自定义值,然后拆分

      替换为

      var myRow = array[iterator_i].join(';');
      var row = myRow.split(';');
      

      【讨论】:

      • 工作正常。但突然我得到这个错误。 “未捕获的类型错误:无法读取未定义的属性‘连接’”。
      • 错误本身很清楚,数据中存在一些空值或空值。尝试添加“Try”“catch”并查看何时发生此错误。我相信只是一些数据问题。
      【解决方案4】:

      你也可以试试这个.....

      let keys = array.shift();
      let arrayofObjects = array.map(subArray => _.object(keys,subArray));
      console.log(arrayofObjects);
      

      【讨论】:

      • 使用 _.fromPairs 代替 _.object,后者在 lodash 4.0.0 中被移除。此答案不再有效。
      猜你喜欢
      • 1970-01-01
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-04
      • 1970-01-01
      • 2019-03-28
      相关资源
      最近更新 更多