Perl: hash from import JSON data, Dumper 输出正确的数据,但是我无法访问它

Perl: hash from import JSON data, Dumper Outputs right data, However I can not access it

我在.json中有以下数据;替换为实际值。

{ "Mercury": [
        {
        "Long": "0.xxxxxx",
        "LongP": "0.xxxxx",
        "Eccent": "0.xxxx",
        "Semi": "0.xxxx",
        "Inclin": "0.xxxx",
        "ascnode": "0.xx.xxxx",
        "adia": "0.xxx",
        "visual": "-0.xx"
        }
]
}

这很好用:

my %data = ();

my $json        = JSON->new();
my $data        = $json->decode($json_text);

my $planet      = "Mercury";

print Dumper $data;    # prints:

一切都很好:

$VAR1 = {
          'Mercury' => [
                         {
                           'Inclin' => '7.',
                           'Semi' => '0.8',
                           'adia' => '6.7',
                           'LongP' => '77.29',
                           'visual' => '-0.00',
                           'Long' => '60.000',
                           'Eccent' => '0.0000',
                           'ascnode' => '48.0000'
                         }
                       ]
        };

然而,当我尝试访问散列时:

my $var = $data{$planet}{Long};

我得到空值,为什么?

问题 1

$data{$planet} 访问散列 %data,但您填充了标量 $data.

你想要 $data->{$planet} 而不是 $data{$planet}

始终使用 use strict; use warnings;。它会发现这个错误。


问题2

$data->{$planet} returns 对数组的引用。

您需要 $data->{$planet}[0]{Long}(第一个元素)或 $data->{$planet}[-1]{Long}(最后一个元素)而不是 $data->{$planet}{Long}。可能是。数组表明元素的数量并不总是一个,因此您可能需要一个循环。