gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:37:25 26 4
gpt4 key购买 nike

如何在 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$gpath\E/?||;

$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$gpath\E/?||;
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 之上。 .

关于perl - 在 Perl 中创建符合 Fancytree 预期 JSON 格式的目录树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49337768/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com