2013-02-19 77 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字符串。

相关问题