【问题标题】:Converting an array of arrays to list of JSON objects instead of JSON strings将数组数组转换为 JSON 对象列表而不是 JSON 字符串
【发布时间】:2017-07-13 18:36:54
【问题描述】:

我正在尝试将数组数组转换为 JSON 对象列表。

var headers = ['first name','last name','age']

var data = [ [ 'John', 'Gill', '21' ], [ 'Sai', 'Varun', '21' ] ]

当我们使用上面两个列表来生成 JSON 的列表时,输出会是这样的,

[ { 'First name': 'John', 'Last name': 'Gill', age: '21' },
  { 'First name': 'Sai', 'Last name': 'Varun', age: '21' } ]

但我需要输出为,(双引号字符串和 JSON 不应该是字符串,而应该是 JSON 对象)

[ {"First name":"John","Last name":"Gill","age":"21"},
  {"First name":"Sai","Last name":"Varun","age":"21"} ]

我尝试使用JSON.stringify,但结果不会是JSON object,它会是JSON string,这将阻止从整个列表中访问每个JSON。

我已经经历了很多这样的答案,但都是徒劳的。有人可以对此有所了解吗?!

【问题讨论】:

  • 请添加您尝试过的内容。
  • 我已经尝试使用JSON.stringify,我已经在答案中提到了。
  • 你试过JSON.parse(JSON.stringify(data))吗?
  • @GeomanYabes 那最终会返回data 对吧?!

标签: javascript arrays json stringify


【解决方案1】:

您可以先生成一个包含对象的数组,然后对数组进行字符串化。

var headers = ['first name', 'last name', 'age'],
    data = [['John', 'Gill', '21'], ['Sai', 'Varun', '21']],
    result = data.map(function (a) {
        var object = {};
        headers.forEach(function (k, i) {
            object[k] = a[i];
        });
        return object;
    });
    
console.log(JSON.stringify(result));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

ES6

var headers = ['first name', 'last name', 'age'],
    data = [['John', 'Gill', '21'], ['Sai', 'Varun', '21']],
    result = data.map(a => headers.reduce((r, k, i) => Object.assign(r, { [k]: a[i] }), {}));
    
console.log(JSON.stringify(result));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    【解决方案2】:

    var headers = ['first name','last name','age']
    var data = [ [ 'John', 'Gill', '21' ], [ 'Sai', 'Varun', '21' ] ]
    
    function createItem(item) {
        newObject = {}
        item.map((val,i)=>newObject[headers[i]]=val)
    	return newObject
    }
    
    console.log(data.map(item=>createItem(item)))

    【讨论】:

    • 想说 Nina 的解决方案更优雅、更短、更快。但很惊讶它毕竟慢了一点(35%):jsbench.me/u9iziasjz2/1
    【解决方案3】:

    演示

    var headers = ['first name','last name','age'];
    
    var data = [['John', 'Gill', '21'],['Sai', 'Varun', '21']];
    
    var res = data.map(function(item) {
      var obj = {};
      for (var i in headers) {
        obj[headers[i]] = item[i];
      }
      return obj;
    });
    
    console.log(res);

    【讨论】:

      猜你喜欢
      • 2013-06-25
      • 2013-08-29
      • 2018-04-21
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多