2017-02-23 150 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);