2017-07-26 14 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; 
関連する問題