【问题标题】:Want to read JSON file strings (multiple values) in perl想在 perl 中读取 JSON 文件字符串(多个值)
【发布时间】:2021-10-10 07:16:15
【问题描述】:

以下是我的 json 文件(demo.json)

 [
  {
     "Directory" : "/opt/gehc/abc/root/mr_csd/xxx/diag/",
     "Files" : [ "abc.html","xyz.html", 
                "mnp.html"],
     "Permission" : 555
  }
 ]

我想一一读取位于“目录”中的“文件”中的每个文件,并更改其“权限”

以下是我已经启动的代码,请帮助:

#!/usr/bin/perl

use JSON;
my $filename = 'demo.json';

my $data;
{
    local $/ = undef;
    open my $fh, '<', $filename;
    $data = <$fh>;
    close $fh;
}

my $result = decode_json( $data );

for my $report ( @{$result} ) {

【问题讨论】:

  • 你的 JSON 文件是一个散列数组(实际上这里只有一个散列,所以也许你可以使用一个简单的散列代替?)。试试@{ $result-&gt;[0]{Files} }

标签: json perl


【解决方案1】:

使用您自己的代码,您可以轻松地将 json 结构取消引用为更简单的结构:

my @files = @{ $result->[0]{Files} };
my $perm = $result->[0]{Permission};

print Dumper \@files, $perm;

将打印的内容:

$VAR1 = [
          'abc.html',
          'xyz.html',
          'mnp.html'
        ];
$VAR2 = 555;

然后你可以用一个简单的 for 循环遍历文件:

for my $file (@files) { ...

必要时还有chmod 文件。尽管您可能必须将数字 555 准备为八进制,如文档中所述。

如果您有多个称为“报告”的数组级别,您可以像这样循环遍历它们:

for my $report (@{ $result }) {
    my @files = @{ $report->{Files} };
    my $perm = $report->{Permission};
    print Dumper \@files, $perm;
}

【讨论】:

    猜你喜欢
    • 2016-04-26
    • 2017-09-13
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多