2017-02-23 146 views
0

我试图将数组数组转换为JSON对象列表。将数组数组转换为JSON对象列表而不是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 whic h会阻止从列表中访问每个JSON。

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

+0

请加你已经尝试了什么。 –

+0

我已经尝试使用'JSON.stringify',我已经在答案中提到过。 –

+0

你试过'JSON.parse(JSON.stringify(data))'? –

回答

2

您可以先用对象生成一个数组,然后将数组字符串化。

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) 
 
\t return newObject 
 
} 
 

 
console.log(data.map(item=>createItem(item)))

+0

想说尼娜的解决方案更优雅,更短,更快。但感到惊讶的是它有点慢(35%):https://jsbench.me/u9iziasjz2/1 –

0

DEMO

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);