2013-02-19 74 views
3

我試圖從json對象創建一個<String, Array()>地圖。 想象我得到這個JSON結構:如何轉換JavaScript hashmap?

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

我想創建將地圖:

鍵(串),價值(陣列)

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

是否有可能做到這一點? :/

在此先感謝。

+0

沒有這樣的事情作爲「JSON對象」,我不明白什麼可以是你顯示的對象。這是你收到的一個字符串嗎? – 2013-02-19 16:58:08

+0

最好解釋一下你想用這張地圖做什麼,因爲它可能是你可以使用這個對象。 – Popnoodles 2013-02-19 16:58:57

+2

您的「JSON結構」根本不是JSON ... – maerics 2013-02-19 16:59:25

回答

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

輸出:

{ 「用戶id」:[ 「123123」, 「321321」], 「密碼」:[ 「fafafa」, 「nana123」],」時代 「:」 21" , 「34」]}

+0

你是個天才!這就是我需要的。謝謝!事情是,如果我不知道所有的鍵名稱,我如何創建地圖到字符串,數組()()? – msqar 2013-02-19 17:25:58

+0

@ user59574我已經編輯它而無需定義鍵。 – MrCode 2013-02-19 17:39:45

+0

非常感謝你們! :) – msqar 2013-02-19 17:59:06

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 2013-02-19 17:37:38

+0

@ user59574:請參閱以下ECMAScript第5版函數 - [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的/參考/ Global_Objects /陣列/的forEach)。 – maerics 2013-02-19 17:42:49

+0

ECMAScript 5的很好的示例用法,但要注意這不適用於比Internet Explorer 9更早的任何東西。 – MrCode 2013-02-19 17:47:23

1

JavaScript的JSON.stringify將幫助您任何兼容JSON對象模型轉換成JSON字符串。

相關問題