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}
。可能是。数组表明元素的数量并不总是一个,因此您可能需要一个循环。
我在.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}
。可能是。数组表明元素的数量并不总是一个,因此您可能需要一个循环。