将哈希数组转换为json

Tia*_*sta 4 perl

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

while(...)
{
    ...
    push(@ranks, {id => $id, time => $time});
}
Run Code Online (Sandbox Code Playgroud)

致JSON:

use JSON;
$j = new JSON;
print $j->encode_json({ranks => @ranks});
Run Code Online (Sandbox Code Playgroud)

但它正在输出:

{"ranks":{"time":"3","id":"tiago"},
 "HASH(0x905bf70)":{"time":"10","id":"bla"}}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,它无法写入哈希并且没有数组......

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

 {"ranks":[{"time":"3","id":"tiago"},
           {"time":"40","id":"fhddhf"},
           {"time":"10","id":"bla"}]}
Run Code Online (Sandbox Code Playgroud)

ike*_*ami 7

所有这些都是一样的:

ranks => @ranks

'ranks', @ranks

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

ranks => $ranks[0], $ranks[1] => $ranks[2]
Run Code Online (Sandbox Code Playgroud)

因此,当您打算使用一个元素创建哈希时,您将创建一个包含两个元素的哈希.

您尝试将数组用作哈希值,但哈希值只能是标量.但是,通常使用对数组的引用作为哈希值,因为引用是标量,这就是encode_json期望的结果.

print $j->encode_json( { ranks => @ranks } );
Run Code Online (Sandbox Code Playgroud)

应该

print $j->encode_json( { ranks => \@ranks } );
Run Code Online (Sandbox Code Playgroud)


pav*_*vel 6

print $j->encode_json({ranks => @ranks});
Run Code Online (Sandbox Code Playgroud)

应该:

print $j->encode_json({ranks => \@ranks});
Run Code Online (Sandbox Code Playgroud)