我有一个HASH参考$job
,其中包含以下数据:
{
"opstat" : "ok",
"response": {
"group_id":23015,
"order_id":"139370",
"job_count":"10",
"credits_used":"100.45",
"currency":"USD"
}
}
我想打印“响应”键的哈希值。 我试过这样做但没有用
print %{$job->{'response'}}
修改
我不想要任何格式化。我想知道如何访问'response'键值中的每个元素。
答案 0 :(得分:3)
我想知道如何访问'response'键值中的每个元素。
根据定义,您需要某种循环。 foreach循环是典型的,但您也可以使用map
。
for my $key (keys %{$job->{response}}) {
my $val = $job->{response}{$key};
print("$key: $val\n"); # Or whatever
}
或
my $response = $job->{response};
for my $key (keys %$response) {
my $val = $response->{$key};
print("$key: $val\n"); # Or whatever
}
答案 1 :(得分:2)
尝试以下代码,这是一个真实的&完整的脚本:
#!/usr/bin/env perl
use strict;
use warnings;
my $job = {
'opstat' => 'ok',
'response' => {
'currency' => 'USD',
'group_id' => ':23015',
'job_count' => '10',
'order_id' => '139370',
'credits_used' => '100.45'
}
};
foreach my $key (keys %{$job}) {
print "key=$key|value=$job->{$key}\n";
# Testing if "$job->{$key}" is a HASH ref
# ...if yes, we iterate inside the HASH
# through the next level.
if (ref($job->{$key}) eq "HASH") {
foreach my $key2 (keys %{$job->{$key}}) {
print "\tkey=$key2|value=$job->{$key}->{$key2}\n";
}
}
}
这是输出:
key=opstat|value=ok
key=response|value=HASH(0x1638998)
key=currency|value=USD
key=group_id|value=:23015
key=order_id|value=139370
key=job_count|value=10
key=credits_used|value=100.45
如果您想访问“group_id”键:
print $job->{response}->{group_id};
如果您只想访问“响应”HASH而不进行任何测试:
foreach my $key (keys %{$job->{response}}) {
print "key=$key|value=$job->{response}->{$key}\n";
}
或使用此while
循环和each
:
while (my ($key,$value) = each %{$job->{response}}){
print "key=$key|value=$value\n";
}
答案 2 :(得分:1)
use Data::Dumper;
print Dumper( $job->{response} );
或单独......
print $job->{response}{group_id};
答案 3 :(得分:0)
我不太确定你想要达到的目标;您的代码将打印内部哈希的内容而不进行任何格式化。如果您想要格式化输出,则必须使用Data::Dumper模块:
use Data::Dumper;
my $job = {
"opstat" => "ok",
"response" => {
"group_id":23015,
"order_id":"139370",
"job_count":"10",
"credits_used":"100.45",
"currency":"USD"
}
};
print Dumper($job->{'response'});