0

我正在使用 Perl 进行一些 API 查询,并使用 Data::Dumper 来打印内容,并希望将几个键分配为变量。

   $client->request( "GET", "interfaces/detail", $opts );
    my $out = decode_json $client->responseContent();
    print Dumper $out;

但是,我无法打印特定键的 (b4) 输出或将其定义为变量。

print $out{'b4'};

我认为这是由于 JSON 格式的 HASH/ARRAY/HASH/HASH/Key=>Value 的嵌套数据结构。

  DB<1> x $out
0  HASH(0x493f290)
   'data' => ARRAY(0x494e2e0)
      0  HASH(0x4475160)
         'a1' => '11'
         'a2' => '12'
         'a3' => '13'
         'a4' => HASH(0x494e560)
            'b1' => '21'
            'b2' => 22
            'b3' => '23'
            'b4' => '24'
            'b5' => '25'
            'b6' => '26'
            'b7' => '27'
         'a5' => '14'

如何从引用的布局中获取值“24”?

4

1 回答 1

2

$out不是哈希,它是哈希引用。如果您不确定 Perl 中的引用,请阅读Perl 参考教程。引用被取消引用->。取而代之的$out{key}$out->{key}.

在您的特定情况下,您有一个哈希引用到一个带有另一个哈希的哈希列表。Perl Data Structures Cookbook介绍了如何处理这些问题。由于b4向下数层,您需要指定每一层。 $out->{data}[0]{a4}{b4}.


$out{key}正在访问哈希%out。印记(即$@%根据变量的使用方式而变化,但$out{key}仍然是%out

因为$out{key}访问不同的变量,你应该得到一个错误,如Global symbol "%out" requires explicit package name. 不幸的是,Perl 默认不这样做,你必须用use strict. 这应该是程序顶部的第一件事。 你应该真的,真的,真的使用 strict 和 warnings。它会捕捉到许多像这样令人沮丧的错误。

于 2016-02-29T22:48:27.817 回答