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]

したがって、1つの要素でハッシュを作成する場合は、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 に答える