2013-07-31 126 views
1

我想访问从api返回的数据,我只是不能从数组中获得正确的值,我知道API是返回数据作为翻车机可以在屏幕上打印出来没有问题。从Perl阵列/散列打印信息

当试图打印关于数组的所有信息,所以我确切地知道打印出什么,我只是收到一个散列。对不起,如果这是混乱,仍然在学习。

使用下面的代码我得到以下输出,

foreach my $hash (@{$res->data}) { 
    foreach my $key (keys %{$hash}) { 
    print $key, " -> ", $hash->{$key}, "\n"; 
    } 
} 

输出

stat -> HASH(0xf6d7a0) 
gen_info -> HASH(0xb66990) 

做任何你知道我可以修改上面的哈希穿越?

我正在尝试做的底线是打印出一个数组的特定值。

请参阅我的Dumper的阵列。

print Dumper(\$res->data); 

http://pastebin.com/raw.php?i=1deJZX2f

我试图打印出的数据是GUID字段。

我认为这会是这样的

print $res->data->[1]->{guid} 

但是这似乎并没有工作,我敢肯定,我只是在这里的东西比我应该更多地考虑它,如果有人能点我在写方向或写信给我正确的打印,并解释我在做什么错了,这将是巨大的

谢谢

+0

在F前你要找的是'$ res-> data - > {gen_info} {guid}'。 – hobbs

回答

1

你拥有的结构是散列哈希数组。这在转储中显示为

# first hash with key being 'stat', 
#  Second hash as keys (traffic, mail_resps...) followed by values (=> 0) 
'stat' => { 
      'traffic' => '0', . 
      'mail_resps' => '0', 

所以第一个散列中的键的值是散列或哈希散列。

如果要打印出每个元素,则需要为第二个散列的键添加额外的循环。

foreach my $hash (@{$res->data}) { # For each item in the array/list 
    foreach my $key (keys %{$hash}) { # Get the keys for the first hash (stat,gen_info) 
    foreach my $secondKey (keys %{$hash->{$key}}) # Get the keys for the second hash 
    { 
     print $key, " -> ", $secondKey, " -> ",${$hash->{$key}}{$secondKey}, "\n"; 
    } 
    } 
} 

如果你是在GUID只是有兴趣,那么你会访问它:

$res->data->[1]->{gen_info}{guid} 

其中gen_info是第一个哈希和GUID关键是第二散列

关键

您可以检查是否钥匙放在了第一和第二散列存在使用访问退出

$n = 1 # Index of the array you want to get the information 
if ((exists $res->data->[$n]->{gen_info}) && # Check for the keys to exists in 
    (exists $res->data->[$n]->{gen_info}{guid})) # in each hash 
{ 
    # do what you need to 
} 
else 
{ 
    print "ERROR: either gen_info or guid does not exist\n"; 
} 
+0

谢谢Glenn,那正是我在找的东西,只是不得不将数组的索引更改为0而且它工作正常!有很多阅读,然后我看到。再次感谢您 – ccsteale

+1

您可以在'[$ n]'后面省略' - >'。 – friedo

+0

感谢您指出在[$ n]之后可以省略 - >。 – Glenn

2

如果在哈希散列,你可以试试这个

foreach my $hash (@{$res->data}) { 

    foreach my $key (keys %{$hash}) { 

     my $innerhash = $hash->{$key}; 

     print $key . " -> " . $hash . "\n"; 

     foreach my $innerkey (keys %{$innerhash}) { 

      print $key. " -> " . $innerhash->{$innerkey}. "\n"; 

     } 
    } 
} 
+0

谢谢你,这就是我需要的。我想要做的是准确找出我需要在我的帖子底部显示的内容。只需从$ res-> data - > ...打印guid字段,你知道我需要替换...,而数组并不是我最强烈的一点。 – ccsteale