2017-02-23 5 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 문자열 안하지만

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

내가 JSON.stringify를 사용하여 시도) JSON 객체해야하지만 결과는 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);