2014-02-12 4 views
0

Я пытаюсь создать подпрограмму для добавления новых значений в json-файл, но, похоже, не может правильно помещать вещи. В конце концов я хотел бы иметь возможность строить эти данные. в идеале, каждый раз, когда выполняется эта процедура, к массиву добавляются новейшие данные, переданные в качестве аргумента, поэтому они могут быть построены.Нужно добавить новые данные в массив JSON в perl

Вот что у меня есть.

# Subroutine to push CPU data to customer/device json file 
sub push_json_data 
{ 
    my $json = JSON->new; 
    #get these as arguements 
    my $json_cpu_user = $_[0]; 
    my $json_cpu_system = $_[1]; 
    my $json_cpu_idle = $_[2]; 

    my $filename = 'data/custid_devid.json'; 
    #open file for read/write results 
    #open (JSONFILE, "+>$filename"); 
    #print JSONFILE "$json_data"; 
    #close (JSONFILE); 

    { 
     local $/; #Enable 'slurp' mode 
     open my $fh, "<", "$filename"; 
     $json = <$fh>; 
     close $fh; 
    } 

    my $data = decode_json($json); 
    my $newdata = {user=>"$json_cpu_user",system=>"$json_cpu_system",idle=>"$json_cpu_idle"}; 

    my $previousdata = $data->{'CPU'}; 
    my $newjsondata = {"CPU"=>[$previousdata,$newdata]}; 
    print Dumper $newjsondata; 

    open my $fh, ">", "data/custid_devid.json"; 
    print $fh encode_json($newjsondata); 
    close $fh; 
}; 

что выдает что-то вроде этого ...

$VAR1 = { 
      'CPU' => [ 
        [ 
         [ 
         { 
          'system' => '0', 
          'user' => '1', 
          'idle' => '97' 
         } 
         ], 
         { 
         'system' => '0', 
         'user' => '0', 
         'idle' => '98' 
         } 
        ], 
        { 
         'system' => '0', 
         'user' => '0', 
         'idle' => '98' 
        } 
        ] 
     }; 

Я получаю дополнительный массив для каждого значения, как я могу обойти это?

+0

показать, как выглядит исходный файл с помощью только одной точки данных (или нуля или обоих)? – ysth

ответ

2

Если я начну с файлом, как:

{"CPU":[]} 

и изменить код, чтобы сделать:

my $newdata = {user=>"$json_cpu_user",system=>"$json_cpu_system",idle=>"$json_cpu_idle"}; 
my $data = decode_json($json); 
push @{ $data->{'CPU'} }, $newdata; 
... 
print $fh encode_json($data); 

делает то, что я думаю, что вы хотите.

+0

Yup, вот и все, спасибо! – lugh24

Смежные вопросы