加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Perl中创建符合Fancytree预期JSON格式的目录树

发布时间:2020-12-16 06:19:53 所属栏目:大数据 来源:网络整理
导读:如何在Perl中创建目录树以符合Fancytree预期的 JSON format? 这是我想出的Perl部分,遍历给定的路径: sub get_tree{ my ($gpath) = @_; my %r; use File::Find; my $c = sub { my $dir = $File::Find::dir; my $r = %r; my $tdir = $dir; $tdir =~ s|^Q$g
如何在Perl中创建目录树以符合Fancytree预期的 JSON format?

这是我想出的Perl部分,遍历给定的路径:

sub get_tree
{
    my ($gpath) = @_;
    my %r;

    use File::Find;
    my $c = sub {
        my $dir  = $File::Find::dir;
        my $r    = %r;

        my $tdir = $dir;
        $tdir    =~ s|^Q$gpathE/?||;

        $r = $r->{$_} ||= {} for split m|/|,$tdir;
    };
    find($c,$gpath);
    return %r;
}

它在JSON编码后返回以下结果:

{
  "dir3":{

  },"dir1":{
    "sub-dir2":{

    },"sub-dir1":{

    }
  },"dir2":{
    "sub-dir1":{
      "sub-sub-dir1":{
        "sub-sub-sub-dir1":{

        }
      }
    }
  }
}

Fancytree遵守其JSON format的预期结果是:

[
    {"parent": "dir3"},{"parent": "dir2","child": [
       {"parent": "sub-dir1","child": [
          {"parent": "sub-sub-dir1","child": [
             {"parent": "sub-sub-sub-dir1"}
          ]}
       ]}
    ]},{"parent": "dir1","child": [
       {"parent": "sub-dir1"},{"parent": "sub-dir1"}
    ]}
]

关键是要在一次运行中完成,无需后期处理,这将是理想的.

有关如何实现这一目标的任何帮助?

解决方法

你可以试试,

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

sub get_tree {
    my ($gpath) = @_;
    my %r;
    my @root;

    use File::Find;
    my $cb = sub {

        my $tdir = $File::Find::dir;
        $tdir    =~ s|^Q$gpathE/?||;
        return if $r{$tdir} or !$tdir;

        my ($pdir,$cdir) = $tdir =~ m|^ (.+) / ([^/]+) z|x;
        my $c = $r{$tdir} = { parent => $cdir // $tdir };

        if (defined $pdir) { push @{ $r{$pdir}{child} },$c }
        else { push @root,$c }

    };
    find($cb,$gpath);
    return @root;
}

它使用哈希来快速查找节点,并在@root的顶部构建完整的目录结构.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读