在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的顶部构建完整的目录结构. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |