我想转换我创建的哈希数组:
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 :(得分:6)
print $j->encode_json({ranks => @ranks});
应该是:
print $j->encode_json({ranks => \@ranks});
答案 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 } );
答案 2 :(得分:3)
尝试将数组作为参考传递。
to_json({ranks => \@ranks},{ascii => 1,pretty => 1});