2013-02-19 3 views
3

json 개체에서 <String, Array()> 맵을 만들려고합니다.JavaScript 해시 맵을 변환하는 방법은 무엇입니까?

[ 
    { 
     "userId": "123123", 
     "password": "fafafa", 
     "age": "21" 
    }, 
    { 
     "userId": "321321", 
     "password": "nana123", 
     "age": "34" 
    } 
] 

난 것 만들려는지도 :

키 (문자열), 값 (배열)

{ 
    "userId": [ 
     "123123", 
     "321321" 
    ], 
    "password": [ 
     "fafafa", 
     "nana123" 
    ], 
    "age": [ 
     "21", 
     "34" 
    ] 
} 

는이 작업을 수행하는 것이 가능 내가이 JSON 구조를 가지고 상상 ? :/

미리 감사드립니다.

+0

"json 개체"와 같은 것은 없으며 사용자가 표시 할 개체가 무엇인지 알지 못합니다. 그것은 당신이받는 문자열입니까? –

+0

지도를 사용하여 원하는 것을 설명하는 것이 가장 좋습니다. 왜냐하면 그지도 개체를 사용할 수 있기 때문입니다. – Popnoodles

+2

"JSON 구조체"가 JSON이 아닙니다 ... – maerics

답변

8

Demo

var json = '[{"userId" : "123123", "password": "fafafa", "age": "21"}, {"userId" : "321321", "password" : "nana123", "age" : "34"}]'; 

var list = JSON.parse(json); 
var output = {}; 

for(var i=0; i<list.length; i++) 
{ 
    for(var key in list[i]) 
    { 
     if(list[i].hasOwnProperty(key)) 
     { 
      if(typeof output[key] == 'undefined') 
      { 
       output[key] = []; 
      } 
      output[key].push(list[i][key]); 
     } 
    } 
} 

document.write(JSON.stringify(output)); 

출력 :

{ "userId를": "123123", "321321", "비밀번호": "fafafa", "nana123", " 나이 ":"21 ","34 "]}

+0

당신은 천재입니다! 그게 내가 필요한거야. 감사! 문제는, 내가 모든 키 이름을 모르는 경우 어떻게 dinamically String, Array()에지도를 만들 수 있습니까? – msqar

+0

@ user59574 키를 정의 할 필요없이 작동하도록 편집했습니다. – MrCode

+0

대단히 감사합니다 !!! :) – msqar

3
function mergeAttributes(arr) { 
    return arr.reduce(function(memo, obj) { // For each object in the input array. 
    Object.keys(obj).forEach(function(key) { // For each key in the object. 
     if (!(key in memo)) { memo[key] = []; } // Create an array the first time. 
     memo[key].push(obj[key]); // Add this property to the reduced object. 
    }); 
    return memo; 
    }, {}); 
} 

var json = '[{"userId" : "123123", "password": "fafafa", "age": "21"}, {"userId" : "321321", "password" : "nana123", "age" : "34"}]'; 

mergeAttributes(JSON.parse(json)); 
// { 
// "userId": ["123123", "321321"], 
// "password": ["fafafa", "nana123"], 
// "age": ["21", "34"] 
// } 
+0

나는 너의 것을 검사 할 것이다;) 어떻게 작동하는지 보라! 당신 덕분에 너무 !!! – msqar

+0

@ user59574 : 다음 ECMAScript 5th Edition 함수를 참조하십시오. [Array.reduce] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/Reduce), [Object.keys] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/keys) 및 [Array.forEach] (https://developer.mozilla.org/en-US/docs)를 참조하십시오./JavaScript/Reference/Global_Objects/Array/forEach). – maerics

+0

ECMAScript 5의 사용법이 좋지만 Internet Explorer 9보다 오래된 버전에서는 작동하지 않습니다. – MrCode

1
자바 스크립트의 JSON.stringify 당신은 JSON 문자열로 어떤 JSON을 준수 개체 모델을 변환하는 데 도움이 될 것입니다

.

관련 문제