2012-12-30 186 views
4

我想转换散列的数组,我创造这样的:哈希转换阵列JSON

while(...) 
{ 
    ... 
    push(@ranks, {id => $id, time => $time}); 
} 

要JSON:

use JSON; 
$j = new JSON; 
print $j->encode_json({ranks => @ranks}); 

但它输出这样的:

{"ranks":{"time":"3","id":"tiago"}, 
"HASH(0x905bf70)":{"time":"10","id":"bla"}} 

正如你所看到的,它不能写在哈希上,也没有数组...

我想输出看起来像这样的JSON字符串:

{"ranks":[{"time":"3","id":"tiago"}, 
      {"time":"40","id":"fhddhf"}, 
      {"time":"10","id":"bla"}]} 
+0

什么是$ J′你用什么软件包来支持JSON? – schtever

+0

对不起,更新了这个问题... –

回答

6
print $j->encode_json({ranks => @ranks}); 

应该是:

print $j->encode_json({ranks => \@ranks}); 
+0

谢谢,修好了!你能解释一下这个区别吗? –

+0

没有参考,数组将被内插到它的单个元素中。...... – pavel

+0

......其中第一个被作为行列关键字的值,其余部分被视为附加(串化)关键字,并且值 – ysth

3

尝试传递数组作为参考。

to_json({ranks => \@ranks},{ascii => 1,pretty => 1});

6

所有这些都是一样的:

ranks => @ranks 

'ranks', @ranks 

'ranks', $ranks[0], $ranks[1], $ranks[2] 

ranks => $ranks[0], $ranks[1] => $ranks[2] 

所以,你要创建一个哈希有两个元素,当你想用一个元素创建一个散列。

您试图使用一个数组作为散列值,但散列值只能是标量。然而,由于引用是标量,因此使用对数组的引用作为散列值是很常见的,这就是encode_json所期望的。

print $j->encode_json({ ranks => @ranks }); 

应该

print $j->encode_json({ ranks => \@ranks });