2017-07-26 71 views
0

我有一个包含内容的json文件。我正在使用 extract_json打开json。我想访问属性“d”的值在Perl中,我如何只打印通过json提取的值?

sub extract_json{ 
my $file = shift; 
local $/; 
    open my $fh, "<", "$file"; 
    my $json = <$fh>; 
return $json; 
} 

my $targetfile = extract_json(' URL of JSON file'); 
my $object = JSON::XS->new->decode (decode "UTF-8", $targetfile); 

my $flat_hash = { 
'var'=> $object->{'a'}{'b'}{'c'}{'d'} 
}; 

变量d的内容是['31','45']。 我需要赋予“var”的值为['31','45']。

请帮助我获得所需的输出。

+0

什么呢,上面的代码产生? – Nullman

+0

它给了我一个错误,说这个值不是标量或未定义的。 我是否需要取消引用以获取标量上下文? –

+0

是否可以将json文件中的值更改为d1:31和d2:45并提取两个值并以某种方式将它们连接到perl以获得所需的输出? –

回答

0

尝试以下

use warnings; 
use strict; 
use JSON::XS; 
my $targetfile = extract_json('file.json'); 
my $object = JSON::XS->new->utf8->decode($targetfile); 

my $flat_hash = 
{ 
    'var'=> $object->{'a'}{'b'}{'c'}{'d'} 
}; 


sub extract_json{ 
    my $file = shift; 
    local $/; 
    open my $fh, "<", "$file"; 
    my $json = <$fh>; 
    return $json; 
} 

foreach my $key (keys %{$flat_hash}) #Dereferencing hash ref 
{ 

    foreach (@{$$flat_hash{$key}}) #Iterating loop for array ref 
    { 
     print "$key => $_\n"; 
    } 

} 
0

试试这个代码:

use strict; 
use warnings; 
use JSON; 
use Data::Dumper; 

sub extract_json{ 
     my $file =shift; 
     open(my $fh, "<:encoding(UTF-8)" , $file) || die "couldn't open $file"; 
     local $/; 
     my $json=<$fh>; 
return $json; 
} 

my $targetfile = extract_json('example.json'); 
my $object = JSON->new; 
my $decoded= $object->decode($targetfile); 

my $flat_hash ={ 
       'var' => $decoded->{a}{b}{c}->@{d}, 
    }; 
print Dumper $flat_hash;