現在我需要得到{"teams":[1, 2, 35]}
,我在下面寫了代碼。數組可以是Perl中的哈希值
use JSON
my @array;
@array=(1, 2, 35);
my %hash;
$hash{"teams"}[email protected];
$json = encode_json(\%hash);
print $json."\n";
但我只是得到{"teams":3}
。
我的問題是數組可以是Perl中的哈希值嗎?
現在我需要得到{"teams":[1, 2, 35]}
,我在下面寫了代碼。數組可以是Perl中的哈希值
use JSON
my @array;
@array=(1, 2, 35);
my %hash;
$hash{"teams"}[email protected];
$json = encode_json(\%hash);
print $json."\n";
但我只是得到{"teams":3}
。
我的問題是數組可以是Perl中的哈希值嗎?
是的,它可以。
在perl
多維結構是通過引用來完成:
#!/usr/bin/env perl
use strict;
use warnings;
use JSON;
my @array;
@array=(1, 2, 35);
my %hash;
$hash{"teams"}=\@array;
my $json = encode_json(\%hash);
print $json."\n";
這種工作方式是 - 你的散列值可以只是單個標量值。這應該是對數組的引用。
此打印:
{"teams":[1,2,35]}
您可以用完成相同的結果:
$hash{"teams"}=[@array];
這是類似的,因爲它副本@array
到一個匿名數組。
的區別來,如果你再使用@array
:
#!/usr/bin/env perl
use strict;
use warnings;
use JSON;
my @array;
@array=(1, 2, 35);
my %hash;
$hash{"teams"}=\@array;
@array = (3, 4, 5) ;
$hash{"more"} = \@array;
my $json = encode_json(\%hash);
print $json."\n";
這實際上打印:
{"teams":[3,4,5],"more":[3,4,5]}
因爲已經更改了陣列,並使用相同的數組的引用兩次。
但是,如果你這樣做:
#!/usr/bin/env perl
use strict;
use warnings;
use JSON;
my @array;
@array=(1, 2, 35);
my %hash;
$hash{"teams"}=[@array];
@array = (3, 4, 5) ;
$hash{"more"} = [@array];
my $json = encode_json(\%hash);
print $json."\n";
你得到:
{"more":[3,4,5],"teams":[1,2,35]}
你可以看到發生了什麼事情上相當方便Data::Dumper
模塊:
#!/usr/bin/env perl
use strict;
use warnings;
use JSON;
use Data::Dumper;
my @array;
@array = (1, 2, 35);
my %hash;
$hash{"teams"} = @array;
print Dumper \%hash;
你會看到hash
中有什麼是:
$VAR1 = {
'teams' => 3
};
{"teams":3}
爲什麼你會問?那麼,因爲哈希中的條目可以是只有是一個標量。
所以你正在標量環境中訪問你的數組。並在標量上下文中打印一個數組:
print scalar @array; # prints 3
這就是你的例子中發生的事情。
您可能希望添加打印輸出以便其他讀者可以看到區別 –
可能重複的[無法將數組存儲爲散列值](http://stackoverflow.com/questions/23932924/unable-to-store-array-as-a-hash-value)或[我如何將數組作爲值存儲在Perl哈希中?](http:// stackoverflow。com/questions/28480241/how-do-i-store-an-array-as-a-value-in-a-per-hash) –
請將Sobrique answer標記爲正確的! – Mondongo
我認爲Sobrique的答案比無法將數組存儲爲散列值的答案要好,或者如何將數組作爲值存儲在Perl哈希中 –