2010-11-30 118 views
1

我有,其构造这样一个JSON对象:将JSON对象转换为新构造的JSON对象的最简单方法?

{ 
    "xaxis": [ 
     "foo", 
     "bar", 
     "baz" 
    ], 
    "yaxis": [ 
     333, 
     992, 
     1365 
    ] 
} 

从它,我想创建另一个JSON对象stuctured这样的:

{ 
    "piegraph": [ 
     ["foo",333], 
     ["bar",992], 
     ["baz",1365] 
    ] 
} 

这样做在客户端 - 这种转换一边JavaScript可以节省我额外的开发和另一个服务器往返取回本质上相同的数据。

我可以使用jQuery库,如果这将有所帮助。

回答

1

假设你的第一JSON字符串已经被解析到一个对象,你只需要遍历任何两个数组中的元素,打造结果:

var result = { piegraph: [] }; // initialize piegraph as an empty array 

var l = obj.xaxis.length; 
while(l--) { 
    result.piegraph[l] = [ obj.xaxis[l], obj.yaxis[l] ]; 
} 

// result will look like this: 
// {"piegraph":[["foo",333],["bar",992],["baz",1365]]} 

无库需要,只是一个简单的顺序循环。 ;)

+0

+1不直接跳到图书馆! – subhaze 2010-11-30 23:04:43

0

看起来你想做两个数组的成对匹配(又名“压缩”)。

+1

这一点是显而易见的。 – 2010-11-30 21:19:28

2

你可以使用Functional JavaScript

second = { piegraph: Functional.zip([first.xaxis, first.yaxis]) }; 
+0

+10表示该功能宝藏的链接!从来没有遇到过这个。 :) – 2010-11-30 21:26:12

0

承担x和y轴和resultArray即 “piegraph”

jQuery.map(array1, function(item, i){ 
    resultArray.push(new Array(array[item, array2[i])); 
} 
}); 
1

数组1和数组2为什么你不能只用一个for循环像?

for(var i = 0; xaxis.length; i++){ 
    piegraph.push({xaxis[i], yaxis[i]); 
} 
+0

+1为一个干净,简单的解决方案。 -1(`push()`中的大括号)。 – 2010-11-30 21:52:02

1

这是不是很难做手工,但underscore.js功能库有一帮非常方便的功能,包括.zip()

var piegraph = _.zip(obj.xaxis, obj.yaxis);