#perl -w
use strict;
use Encode;
#use Encode 'from_to';
use Data::Dumper;
use JSON;
my @OrgRows = ();
my %id_data = ();
my %id_chirdren = ();
my $firstid = "0";
&readdata();
sub readdata(){
my $line;
while (defined($line = <>)){
my @data = split(/\s+/,$line);
continue if (scalar(@data) < 3);
my $id = $data[0];
my $pid = $data[2];
my $name = $data[1];
$id_data{$id} = $name;
#print "$data[0] - > $data[2] \n";
if (exists $id_chirdren{$pid} ){
push @{$id_chirdren{$pid}} , $id;
}else{
my @chirdren;
push @chirdren, $id;
$id_chirdren{$pid} = \@chirdren;
}
}
# print Dumper(%id_chirdren);
# print Dumper(%id_data);
}
my %ResultData;
&MakeANode(\%ResultData,$firstid);
sub MakeANode(){
my ($hashref,$id) =@_;
$hashref->{"name"}= $id;
#print "$id_data{$id}\n";
$hashref->{"title"} = $id_data{$id};
$hashref->{"children"} = &MakeChildren($id);
}
sub MakeChildren(){
my ($id) = @_;
unless (exists $id_chirdren{$id}){
return "";
}
my @ChildrenIDs = @{$id_chirdren{$id}};
my @result = ();
foreach my $aChild (@ChildrenIDs){
my %NodeHash = ();
&MakeANode(\%NodeHash ,$aChild);
push @result ,\%NodeHash;
}
return \@result;
}
my $json = to_json \%ResultData; # 不能用decode_json 否则会乱码
print $json;
use strict;
use Encode;
#use Encode 'from_to';
use Data::Dumper;
use JSON;
my @OrgRows = ();
my %id_data = ();
my %id_chirdren = ();
my $firstid = "0";
&readdata();
sub readdata(){
my $line;
while (defined($line = <>)){
my @data = split(/\s+/,$line);
continue if (scalar(@data) < 3);
my $id = $data[0];
my $pid = $data[2];
my $name = $data[1];
$id_data{$id} = $name;
#print "$data[0] - > $data[2] \n";
if (exists $id_chirdren{$pid} ){
push @{$id_chirdren{$pid}} , $id;
}else{
my @chirdren;
push @chirdren, $id;
$id_chirdren{$pid} = \@chirdren;
}
}
# print Dumper(%id_chirdren);
# print Dumper(%id_data);
}
my %ResultData;
&MakeANode(\%ResultData,$firstid);
sub MakeANode(){
my ($hashref,$id) =@_;
$hashref->{"name"}= $id;
#print "$id_data{$id}\n";
$hashref->{"title"} = $id_data{$id};
$hashref->{"children"} = &MakeChildren($id);
}
sub MakeChildren(){
my ($id) = @_;
unless (exists $id_chirdren{$id}){
return "";
}
my @ChildrenIDs = @{$id_chirdren{$id}};
my @result = ();
foreach my $aChild (@ChildrenIDs){
my %NodeHash = ();
&MakeANode(\%NodeHash ,$aChild);
push @result ,\%NodeHash;
}
return \@result;
}
my $json = to_json \%ResultData; # 不能用decode_json 否则会乱码
print $json;