4

我想转换我创建的哈希数组,如下所示:

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"}]}
4

3 回答 3

7

所有这些都是一样的:

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 } );
于 2012-12-30T23:04:16.743 回答
6
print $j->encode_json({ranks => @ranks});

应该:

print $j->encode_json({ranks => \@ranks});
于 2012-12-30T22:56:08.340 回答
3

尝试将数组作为参考传递。

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

于 2012-12-30T22:55:59.290 回答