2016-03-18 8 views
-2

私は巨大なjsonファイル〜1000 + linesを持っています。私は2つのことを実装したかったのです。私はこの使用してdecode_jsonをした"s" "1861"としてJSONファイルでjsonのperlによる解析

1)、"Id" : "232799"ならば、割り当てます。それは期待どおりに動作します。

2)versionに1を加算し、ファイルを特定のディレクトリに保存します。私はこれがループで起こることを望みます。

jsonオブジェクト/ json配列を解析するためにdecode_jsonを使用する必要があります。 しかし、バージョンはファイルの最初の行です。デコードが使用できるかどうかはわかりません。何か提案がありますか?

{ 
    "version": "16300173", 
    "con": { 
     "s1": { 
      "key": false, 
      "global": { 
       "cu": [ 
        { 
         "Id": "232799", 
         "s": 1861, 
         "Sps": "xx", 
         "cId": "xyzzde", 
         "pat": "-123456789", 
         "Config": true, 
         "auth": [ 
          { 
           "Type": "5", 
           "dir": "in" 
          }, 
          { 
           "Type": "6", 
           "dir": "out" 
          } 
         ], 

スクリプト:

#!/usr/bin/perl 

    use strict; 
    use warnings; 
    use JSON; 

    my $json; 
    { 
     open my $fh, "<", "https://stackoverflow.com/a/etc/cm/nw/st/cfg.json" 
      or die("Can't open file \"https://stackoverflow.com/a/etc/cm/nw/st/cfg.json\": $!\n"); 
     local $/; 
     $json = <$fh>; 
    } 

    my $data = decode_json($json); 

    for my $customers (@{ $data->{global}{cu} }) { 
    $customers->{s} = 1861 
     if $customers->{id} ==237299; 

} 

    $json = JSON->new->utf8->pretty->encode($data); 

    { 
     open my $fh, ">" ,"https://stackoverflow.com/a/etc/cm/nw/st/cfg.json" 
      or die("Can't open file \"https://stackoverflow.com/a/etc/cm/nw/st/cfg.json\": $!\n"); 
     local $/; 

     print $fh $json; 


    } 
+1

'$データ - >を動作するように見える代わりにId

idを持っています{global} {cu} 'は' $ data - > {con} {s1} {global} {cu} 'であり、バージョンは' $ data - > {versio n} '。 – choroba

+0

@chorobaバージョン番号を増やす方法を教えていただけますか? – virat

+0

'$ data - > {version} ++;'それを行うべきです。 – choroba

答えて

0

としてだけでなく、不足している{con}{s1}キー、あなたはこのコードは

#!/usr/bin/perl 

use strict; 
use warnings; 
use v5.14.1; # for autodie 
use autodie; 

use JSON; 

use constant JSON_FILE => '/a/etc/cm/nw/st/cfg.json'; 

my $data = do { 
    open my $fh, '<', JSON_FILE; 
    local $/; 
    decode_json(<$fh>); 
}; 

my $cu = $data->{con}{s1}{global}{cu}; 

for my $cust (@$cu) { 
    $cust->{s} = 1861 if $cust->{Id} == 232799; 
} 

++$data->{version}; 

{ 
    open my $fh, '>', JSON_FILE; 
    print $fh JSON->new->utf8->pretty->encode($data); 
} 
+0

ファイルをインクリメントして別のディレクトリにインストールしたい場合、どうすればいいですか? – virat

+0

出力ファイルの2番目の定数を宣言する – Borodin