2017-02-23 13 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権利ではありません、それはwhic JSON stringだろう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);

関連する問題